在for i:=1 to 6 的循环中为什么i是从6到1(20分)

  • 主题发起人 主题发起人 serenesky
  • 开始时间 开始时间
S

serenesky

Unregistered / Unconfirmed
GUEST, unregistred user!
在我编写的一个程序中
for i:=1 to 6 do
begin
................
end;
我在中间设置了breakpoint,当我观测i的值的时候,发现i是从6减到1
这是为什么
然后我试着在此语句的前面加上了i:=1,发现i还是从6减到1,如果这样的话,计算结果肯定错误
但是当我将i改写成ii,就正确啦,由1增加到6
请问这是为什么呀
 
Delphi 的编译器优化问题,关掉此选项即可
 
没有遇到过
代码贴出来,瞧瞧
 
是Delphi 的编译器优化问题
 
我用SHOWMESSAGE(inttostr(i))试验了一下,没有问题,你把代码贴出来
 
偶觉得应该不是编译优化问题,因为无论是怎么优化,不能随意改变变量的直
 
你最好检查有没有病毒,我遇过一次最邪的
for i:=1 to 10 do
Begin
xxxxxxxx
End;
在循环体中I的值并不会从1到10,而是一个随机数,但更奇怪的事循环了10次后却会
正常的就结束循环,搞得我疯了一个晚上,后来发现竟然中了个CIH的变种病毒。


 
不可能的事。
delphi优化也不会这样之,除非代码有问题。
真是优化的话,肯定i仅作循环用,在
begin
没用到i
end
 
编译器优化问题
 
编译器优化,这个是编译器自己的事情,你只要按照你程序代码写下去就可以了,你不要管
他们的数据或参数是如何流向,但它一定会给你一个正确的结果的,只要你的程序代码没有
错就行了!!!!
 
编译器优化问题!
 
编译器优化问题!
 
for i:=1 to 6 do
begin
循环体
end;
这个是正常的,你看看它的编译出来的汇编代码就知道了
假如循环体内没有引用i的值,那么它只保证循环体执行6次,并不保证i的值是多少到多少
他是用从大到小达到0退出的,你看看汇编指令,这样循环n次是最快、最少指令的
但是如果循环体内使用了i的值,例如,SHOWMESSAGE(inttostr(i)),那么编译器
就不做这个优化,而严格按照你的起始、结束值
因此它不是bug
 
我有一次更加的邪门。
for i := 3 to 7 do
begin
n := Buffer;
end;

里面得到的i值不是从3开始的, 害得我的取值都乱了。
后来迫于无奈,用 while 语句代替才勉强过了, 现在想起来都不知道是啥回事
 
Delphi 的编译器优化问题,关掉此选项即可
并不会影响结果的.
 
Pipi.说得有道理。其它好多人不知道在说什么。
 
又是这个问题呢. 大家都很热心.
 
请看:
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=755274
和这个问题差不多。
 
是优化的问题
你不用管,结果正确好了
 
结果肯定是正确的,不用去管它
 
后退
顶部