杨为民 发表于 2023-12-29 17:07:48

本帖最后由 杨为民 于 2023-12-29 17:11 编辑

zhangzhonghua 发表于 2023-12-29 14:07
对事不对人,这样的讨论,我无比欢迎,本着科学而严谨的态度,真理是越辩越明的。

1、1楼的程序,是没问 ...
哈哈哈哈,不打自招了吧

(1)楼主说:“1楼的程序,是没问题的,当时用函数名描述,是因为我匆忙且当时根本不知道函数名和函数指针的区别,所以10楼的程序改过来,用函数指针了。10楼的程序,才是有问题的。”
(2)大家看看,这是明明白白地招认:
先在1楼用一个“是没问题的”的程序,造谣说“发现是编译器给2个具有调用关系的函数的2个局部变量分配了相同的地址”
然后才在10楼采用一个“才是有问题的”的程序来 为1楼构陷Keil的C51“编译器给2个具有调用关系的函数的2个局部变量分配了相同的地址”提供证据。
常言到:撒一个谎就接着要100个谎言来掩盖。楼主,你在59楼又撒谎了,请你向大家道歉!
楼主请你脚指头回答我:既然你1楼的程序没有问题,既然你“当时根本不知道函数名和函数指针的区别”,
那么请问:你在1楼怎么会预先知道一天以后在10楼发生的事?
那么请问:你在1楼怎么会预先知道一天以后在10楼的结论?

那么请问:你在1楼怎么会预先知道一天以后在10楼的那个有问题的程序里面的那个地址是“// 到这里,发现 地址 0x0236 的内容被修改”
(3)我从没有见过如此厚颜无耻地蓄意栽赃陷害、造谣诋毁 Keil的C51编译器的事件,C51编译器绝不可能给2个具有调用关系的函数的2个局部变量分配了相同的地址!

杨为民 发表于 2023-12-29 17:30:59

本帖最后由 杨为民 于 2023-12-29 17:34 编辑

zhangzhonghua 发表于 2023-12-29 14:07
对事不对人,这样的讨论,我无比欢迎,本着科学而严谨的态度,真理是越辩越明的。

1、1楼的程序,是没问 ...
“1楼的程序,是没问题的,当时用函数名描述,是因为我匆忙且当时根本不知道函数名和函数指针的区别,所以10楼的程序改过来,用函数指针了。
10楼的程序,才是有问题的。”

哥们,你能在1楼用一个 没有问题的程序 就预先得出 一天以后才理解的 在10楼的 有问题的程序 的结论,并且把它预先写出来,然后理直气壮地问大家“怎么会这样?!怎么办?”

而且连出问题的地址都一模一样,你真正是“天人”,具有未卜先知的能力!
这是只有很烂的编剧才能编出的谎话, 你居然就在59楼大大方方地说了,你还要不要脸?

zhangzhonghua 发表于 2023-12-29 18:18:33

本帖最后由 zhangzhonghua 于 2023-12-29 18:24 编辑

我47楼清清楚楚说明过程了的,怎么还有误会?再补充看看吧。

1、我的实际程序是类似10楼的,用了函数指针,发现调用函数和被调函数的局部变量地址相同,大惑不解。
2、在1楼发帖真心请教,但当时对函数名调用和函数指针调用有什么不同,是一无所知的,以为都是一样的,而且下班前匆忙,所以描述就用函数名调用了。
3、次日发现,奶咖君在3、4楼指出关键点(指针调用、Overlay、调用树),我就在10楼改正了描述,用函数指针调用。后面就是照着奶咖君指出的2个方法去翻箱倒柜了。
4、C51编译器怎么分配栈帧,怎么Overlay的,我在40楼和57楼应该算是充分描述了(知识都是从C51自带Help手册、并仔细对比每次修改的MAP文件变化学习到的)。
所以,“编译器给2个具有调用关系的函数的2个局部变量分配了相同的地址”这句话,如果这2个函数是通过指针调用的,是可能的,C51的Help手册都给出例子了,也是我实际遇到的。

杨为民 发表于 2023-12-29 21:55:29

zhangzhonghua 发表于 2023-12-29 18:18
我47楼清清楚楚说明过程了的,怎么还有误会?再补充看看吧。

1、我的实际程序是类似10楼的,用了函数指针 ...

1. 我的实际程序是类似10楼的,用了函数指针,发现调用函数和被调函数的局部变量地址相同,大惑不解。
2、在1楼发帖真心请教,但当时对函数名调用和函数指针调用有什么不同,是一无所知的,以为都是一样的,而且下班前匆忙,所以描述就用函数名调用了


你的这段话是否是可以理解为
(1)你是先有了10楼的结果:根据10楼的程序,发现编译器给2个局部变量分配了相同的地址,就是“// 到这里,发现 地址 0x0236 的内容被修改”
(2)然后你就把10楼的结果复制到1楼,保留了“// 到这里,发现 地址 0x0236 的内容被修改”这些内容,不是未卜先知。
(3)所以你是根据10楼的程序才得出“编译器给2个具有调用关系的函数的2个局部变量分配了相同的地址”的结论的。


(4)楼主,你这次63楼的辩解是彻头彻尾的谎言!对于Keil的C51编译器,任何时候,包括用了函数指针,调用函数和被调函数的局部变量地址绝对不会相同
(5)请你不要再用“类似10楼的程序”这样语言来欺骗大家。这里是技术论坛,请你把你真实的相关的那几行程序亮出给大家看,否则你的这句“ 我的实际程序是类似10楼的,用了函数指针,发现调用函数和被调函数的局部变量地址相同,大惑不解。”话就是编造出来的,是对Keil的C51编译器的造谣诽谤

(6)如果你的10楼的程序也不是使你得出结论的程序,你又不肯拿出能够证明“编译器给2个具有调用关系的函数的2个局部变量分配了相同的地址”这个结论的相关程序,那么你就是以“莫须有”的程序来造谣,你必须向大家道歉!


杨为民 发表于 2023-12-29 22:00:34

zhangzhonghua 发表于 2023-12-29 18:18
我47楼清清楚楚说明过程了的,怎么还有误会?再补充看看吧。

1、我的实际程序是类似10楼的,用了函数指针 ...

“所以,“编译器给2个具有调用关系的函数的2个局部变量分配了相同的地址”这句话,如果这2个函数是通过指针调用的,是可能的,C51的Help手册都给出例子了,也是我实际遇到的。”

别心虚,不要用手册做挡箭牌,你既然说是“是我实际遇到的”,那么请把你的实际程序亮出来,否则你就是在造谣!

杨为民 发表于 2023-12-29 22:17:50

zhangzhonghua 发表于 2023-12-29 18:18
我47楼清清楚楚说明过程了的,怎么还有误会?再补充看看吧。

1、我的实际程序是类似10楼的,用了函数指针 ...


楼主:2个谎话要用200个谎话去圆,如果你有真实程序,请你马上亮出其中的段落来,如果没有,你就慢慢继续编谎话或者赶快编个莫须有的程序来圆你的谎话吧



zhangzhonghua 发表于 2023-12-30 08:42:11

1、哎哟,本以为昨天下班前的再次补充够清楚了,没想到今早一看,误解还是存在。
有点意思了哈,好吧,我只能豁出去了。
2、但是光打嘴仗我没啥动力,要不玩点更刺激的,打个赌,赌注是2023元人民币。对于下面你的这句话,
“对于Keil的C51编译器,任何时候,包括用了函数指针,调用函数和被调函数的局部变量地址绝对不会相同”。
如果我能给个程序证明这句话是错的,我赢,你给我2023元人民币;如果我不能证明这句话是错的,你赢,我给你2023元人民币。
请大家作证,把微信收款码发这里,输者扫码付款。
怎么样,玩不玩?
3、我这边,实际程序就有这个问题,但这是商业程序,价值是2023元的10倍不止,不能放上来的;而且验证需要下载到我们产品上,按按键才能触发复现。
我可以想想怎么另外弄一个出来,但是这个地址重叠,我一直的说法都是“可能”,没说过"一定会",因为对编译器还是摸不清的,需要尝试,加上运气。
但我觉得有6成把握能赢,所以不妨赌一把。要是弄不出来证明不了,我也认了,愿赌服输。
另外就是编译选项要按我的实际程序那样,以便于复现,即:内存模式 Large, 编译器C51 代码优化级别8,链接器Lx51 不能使用NOOVERLAY关闭Overlay功能,不能使用OVERLAY维护调用树。
这个要作为打赌的条件,因为要是关闭Overlay功能,那肯定不会地址重叠,我必输无疑,那不公平。
4、因为放假,我等会就要出门了,可能晚上才能回来看情况。你先考虑考虑,敢不敢赌一把。
如果你同意,而且也有其他人站出来做见证,我们就算赌上了,看看元旦红包花落谁家。
怎么样,玩不玩?

LAOXU 发表于 2023-12-30 09:05:29

“对于Keil的C51编译器,任何时候,包括用了函数指针,调用函数和被调函数的局部变量地址绝对不会相同”。

=======================================================================


这个赌注我跟注, 楼上算我一个,杨教授稳输,哈哈~~~

大伙一起跟注 赚 新年 第一波 红包~~~ {:biggrin:}

神农鼎 发表于 2023-12-30 09:40:13


向辉煌的 2024 迈进 !

51世界火热的夏天 全面 进入 USB 时代 !
RMB0.99 的 STC8H2K08U-45MHz-TSSOP20/SOP16,元旦送样
硬件USB 支持 仿真/下载, RTC 实时时钟, 年/月/日/时/分/秒
真12位ADC, 144MHz-16位高级PWM新增硬件移相功能
串口1/串口2 支持硬件奇偶校验,支持串口超时硬件判断
都支持帧错误数据检测和自动地址识别
T11,强大的24位定时器,也支持低功耗唤醒
P1.2口在P5.4口上共享,P1.0/P1.1的全部数字功能可以交换
STC8H2K08U-45MHZ-TSSOP20/SOP16,RMB 0.99
2023/12/28, 测试最新通报:
===STC8H2K08U的USB测试正常稳定





51世界火热的夏天 全面进入 USB 时代 !RMB0.99的 STC8H2K08U-45I-TSSOP20/SOP16 - 51 发烧友,UAC,极致音频,大国工匠,艺术人生,乐林漫步 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)

杨为民 发表于 2023-12-30 09:41:17

LAOXU 发表于 2023-12-30 09:05
“对于Keil的C51编译器,任何时候,包括用了函数指针,调用函数和被调函数的局部变量地址绝对不会相同”。
...

(1)终于有懂行的发言了。如果要打赌,则把赌标准确地定义为:

“对于Keil的C51编译器,只要不人为打开优化(优化等级=0)和不人为加入“OVERLAY”优化选项,那么,任何时候,包括用了函数指针,对于调用函数和被调函数的局部变量地址,C51编译器自己绝对不会分配为相同的”。
如何?
(2)不改,你赢,改了,我赢。楼主但凡有你LAOXU这个知识,就不会那么明目张胆地造假了。
(3)响应号召,不赌博,不诈骗。
(4)大家继续吃瓜吧,新年快乐!
页: 1 2 3 4 5 6 [7] 8 9 10
查看完整版本: 遇到局部变量被意外修改的问题,发现是编译器给2个局部变量分配了相同的地址?