delphi "for" 循环中循环变量的注意事项

王朝delphi·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

下面这段代码:

// 在列表中查找值为10的项,如果找到了,则跳出循环

for I := 0 to Count - 1 do

begin

if Items[I] = 10 then break;

end;

// 找到了

if I

begin

...

end;

有问题吗?好像没有问题,如果因为I超出了Count-1而结束循环,

则表示没有找到值为10的项。事实是这样吗?看看对应的汇编代码:

; for I := 0 to Count - 1 do

mov eax, [ebx + $2c]

mov esi, [eax + $08]

dec esi ; 到现在为止是在计算Count - 1

test esi, esi ;判断Count - 1

jl +$19 ;如果小于0,则跳出循环

inc esi ; 将循环结束条件改为当I = Count时

xor edi, edi ; 问题出现了,到这里才设置I = 0

现在问题清楚了,只有在循环结束条件表达式大于等与0才能保证循环变量被初始化,因此,如果Count - 1小于0则I没有被初始化,此时的值是不定的,也就使得“if I

bFind := false;

for I := 0 to Count - 1 do

begin

if Items[I] 10 then continue;

// 找到了

bFind := true;

break;

end;

if bFind then

begin

...

end;

这样才能保证万无一失

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航