Delphi 7惊天大bug。跨单元函数默认参数缓存不同步!!!!! ( 积分: 100 )

  • 主题发起人 主题发起人 我心蓝蓝
  • 开始时间 开始时间
楼上实在搞笑。。。
不说了,该结贴了 ,偶来接分
白痴实在很多,无理的谩骂,你真正了解了有多少?
大富翁上现在流行看贴不回贴,楼主不弄个标题吸引一下,楼上有几位会来?骂人的都是搞笑的一群小丑
 
我都搞不懂那些骂人的心态是怎样的,你们到底仔细看过问题没有?你们看过了思考没有?你们思考之后明白了没有?
的确不应该用惊天2字,但我就觉得这就是大Bug,一个很大的工程,你每次改了一点就去Build试试看。喜欢Delphi,但是不能为它的瑕疵也叫好,这不叫爱她。
实际上,Delphi编译环节上的类似问题还不只这一个,因此弄得我不得不经常用Build去处理。我仍然喜欢Delphi,不过她要是做得更好,对我们大家来说不是更好吗。不过看到Delphi现在的处境,估计要再恢复以前的辉煌时代,不太现实了。很遗憾。。。
 
to 楼上
这不是大Bug,看到那段汇编没有:
Unit1.pas.28: Test;
004529FC B801000000 mov eax,$00000001
00452A01 E8D6FDFFFF call Test

编译器在编译Unit2的时候,发现Test函数默认参数值是1,但是怎么实现这个默认参数呢?Unit1里面使用这个函数的时候没有给参数,于是编译器在所有没有给这个参数的引用位置自动编译成
Test(1);
注意,这个编译是在Unit1内完成的(这就是我说的Compiler Magic-编译魔术)。也就是说,Unit1.pas里面所有这句Test;都被编译器改编成Test(1);,注意这个时候你修改Unit2的默认参数的值,编译器会重新编译Unit2,但是它会认为Unit1没有做过修改,于是就用旧版本的Unit1.dcu链接exe文件!!!!!!明白没有?根本不是Bug,只是一个疏忽!因为实际上你的确没有改Unit1.pas!这是编译魔术的副产品!不是Bug!更不是惊天Bug!
 
感谢大家的参与,基本明白了这个到底是怎么回事。大富翁果然人才济济。[:D]
 

Similar threads

回复
0
查看
992
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
913
SUNSTONE的Delphi笔记
S
后退
顶部