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

  • 主题发起人 主题发起人 我心蓝蓝
  • 开始时间 开始时间
终于发现比我菜的人,run compile build 没学好,另外把改后的文件save一下一般也会重新编译
 
大家不要取笑楼主。源文件只要有变化,无论是注释、代码(如 function test(a: integer = 2): string; 改成 function test(a: integer = 1): string;),也不论是否保存,run 时都应该重新编译,run 时没有重新编译就是有问题。由于本人机子上只装 D2006,无法对 D7 进行测试。D2006 没有楼主说的问题。
 
源文件只要有变化,...没有重新编译就是有问题。
想当然是这样想,但很多情况下,并非想如此。
 
这也是Bug~我看是搂主的思想有Bug~~如果你修改了单元~既不编译也不builer~~而去直接运行那个.exe(手工打开)~你还会发现很多bug~~~
人才
 
这个只能算是一个小BUG,LZ有哗容取众之嫌。
原因也有你自己没养成一个好习惯。
下次记住了,不管改了多少代码,都要随手 ctrl+s,build,就可避免再出如此低级的错误了。build比compile也多花不了多少时间,我是只用build,从不用compile的,更不会没重新build过就直接run的。
 
这也是Bug~我看是搂主的思想有Bug~~如果你修改了单元~既不编译也不builer~~而去直接运行那个.exe(手工打开)~你还会发现很多bug~~~
人才
----------------------------------------------------------------------
可以肯定,你是sb,楼主有说直接运行exe了么?
看东西都看不明白,可以想象你真是个人才,服了u
 
来自:xiaohongna, 时间:2007-2-2 8:36:56, ID:3664595
这也是Bug~我看是搂主的思想有Bug~~如果你修改了单元~既不编译也不builer~~而去直接运行那个.exe(手工打开)~你还会发现很多bug~~~
人才
-------------------------------------------------------------------------------
不知道你是否看完了我的问题,并且是否试过了。既不编译也不builer???我是这么说的吗?你搞飞机啊?
不build,complile 直接运行,这样不对吗? 一个大项目,你今天只改了几个文件,调试某个文件,我得习惯是ctrl+F9, 难道你的习惯就是build all? 你强!!!!!!
既然complie是编译改动的文件,那改了函数的默认参数值,这不叫改动吗?而且这个跟注释不一样,这是会影响程序正确性!这个也不算Bug?
 
有那么多人不厚道。。。你嘲笑楼主的时候,你敢说对一切都了如指掌么?
ufo!说的是对的。
 
当大家都赞美愚公移山的时候,现在的我会嘲笑愚公移山。
山不转你转嘛。
每一个高手都有一个无知的过渡。楼上任何一个嘲笑楼主的人,都曾经做过一些可笑的事情。你敢说你没有做过类似于if Edit.Text+5 = N then的代码?你认为你在嘲笑谁?你在嘲笑你自己的无知。
楼主的细心值得钦佩。
借问:你发现这个问题了吗?
 
靠,嘲笑你是应该的,这样的问题用的着发现吗,肯定会经常遇到,但是你跑来弄个弄醒目的标题,还要在那里唧唧歪歪半天,不是哗容取众是什么
 
小心驶得万年船[:)]
 
算个小bug,但未算惊天的[8D]
 
是有这个问题这几天刚发现,当时觉的好奇怪
 
borland考虑不周,确为bug,不过还不到惊天的地步
 
不是嘲笑,而是玩笑,实际没有什么bug,是你要求太高,人家根本没有设计这个功能。
 
"惊天Bug"这样的描述不妥,顶多是个小Bug.不过这和Delphi的编译机制有关,Delphi是把pas文件编译成dcu文件,然后再根据dcu文件链接成exe文件,当pas没有做改动的时候,你点击run命令运行程序的时候,编译器仅仅连接dcu文件,而不会重新编译它们,这样会让你感到调试的便捷迅速。这样的代价也就是,如果编译器错误的以为你改变默认参数的值后,没有重新build所有pas文件,就会出现你说的情况。也许是Borland考虑不周吧,也能算一个Bug吧,但充其量也是一个小Bug,并不是很严重的Bug,毕竟默认参数在使用上改变默认值的事情并不频繁(可能楼主改的频繁!)。楼主发现这个问题后,来这里和大家说说也是无可厚非的,这样可以把前人的经验交给新来的初学者,让大家都有机会注意到这个问题。只不过没必要把它说成“惊天大Bug”,那样貌似有点言过其实了。
 
最后罗嗦一句,没有任何一样软件敢说自己完全没有Bug的,就像没有任何一个人敢说自己从来不犯错一样。有bug希望Borland改正(貌似上面有朋友提到BDS2006没有这样的问题,也许Borland改正了)。我刚刚开电脑,这就去试试我的D7,看看是否也有这个问题,呵呵,我记得我打过D7的Sp2补丁,看看Borland结局了没。
 
确实有这个问题。不过看了看汇编,发现,原来编译器是这样做的。

Unit1.pas.28: Test;
004529FC B801000000 mov eax,$00000001
00452A01 E8D6FDFFFF call Test

看来我已经知道为什么了,楼主估计也看懂了把!原来就是Compiler Magic,哈哈,可能算是Delphi的疏忽,但不是Bug那么严重。
 
我不认为这是BUG,我觉得这种设计非常好,改了我反而不喜欢,不习惯,最好改回原来的。
 

Similar threads

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