Delphi中For循环变量违反循环绑定,如何改写为长尾?

2026-04-10 16:422阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计443个文字,预计阅读时间需要2分钟。

Delphi中For循环变量违反循环绑定,如何改写为长尾?

今天遇到了一个奇怪的bug。我有一个代码片段:

Delphi中For循环变量违反循环绑定,如何改写为长尾?

var i: integer;... for i :=0 to FileNames.Count - 1 do begin ShowMessage(IntToStr(i) + ' from ' + IntToStr(FileNames.Count - 1)); FileName :=FileNames[i]; ... end;ShowMessage('all');

今天我遇到了很奇怪的bug.

我有下一个代码:

var i: integer; ... for i := 0 to FileNames.Count - 1 do begin ShowMessage(IntToStr(i) + ' from ' + IntToStr(FileNames.Count - 1)); FileName := FileNames[i]; ... end; ShowMessage('all');

FileNames列表有一个元素.所以,我认为然后循环将被执行一次,我看到了

0 from 0 all

这是我做了几千次的事情:).
但是在这种情况下,我看到了代码优化开启时的第二次循环迭代.

0 from 0 1 from 0 all

没有代码优化循环迭代正确.
目前我甚至不知道移动这个问题的方向(并且上部循环绑定保持不变,是).

所以任何建议都会非常有帮助.谢谢.

我使用Delphi 2005(Upd2)编译器.

考虑到LU RD提到的质量控制报告,以及我自己对D2005的经验,这里有一些解决方法.我记得自己使用while循环解决方案.

1.将for循环写为while循环

var i: integer; begin i := 0; while i < FileNames.Count do begin ... inc(i); end; end;

2.从任何其他处理中单独保留for循环控制变量,并使用一个单独的变量,在循环中递增,用于字符串操作和FileNames索引.

var ctrl, indx: integer; begin indx := 0; for ctrl := 0 to FileNames.Count-1 do begin // use indx for string manipulation and FileNames indx inc(indx); end; end;

你暗示了一个解决方法,说没有代码优化循环迭代正确.假设你有优化,在程序/函数之前关闭它({$O-}),之后再关闭({$O}).注意! Optimization指令只能用于至少整个过程/函数.

本文共计443个文字,预计阅读时间需要2分钟。

Delphi中For循环变量违反循环绑定,如何改写为长尾?

今天遇到了一个奇怪的bug。我有一个代码片段:

Delphi中For循环变量违反循环绑定,如何改写为长尾?

var i: integer;... for i :=0 to FileNames.Count - 1 do begin ShowMessage(IntToStr(i) + ' from ' + IntToStr(FileNames.Count - 1)); FileName :=FileNames[i]; ... end;ShowMessage('all');

今天我遇到了很奇怪的bug.

我有下一个代码:

var i: integer; ... for i := 0 to FileNames.Count - 1 do begin ShowMessage(IntToStr(i) + ' from ' + IntToStr(FileNames.Count - 1)); FileName := FileNames[i]; ... end; ShowMessage('all');

FileNames列表有一个元素.所以,我认为然后循环将被执行一次,我看到了

0 from 0 all

这是我做了几千次的事情:).
但是在这种情况下,我看到了代码优化开启时的第二次循环迭代.

0 from 0 1 from 0 all

没有代码优化循环迭代正确.
目前我甚至不知道移动这个问题的方向(并且上部循环绑定保持不变,是).

所以任何建议都会非常有帮助.谢谢.

我使用Delphi 2005(Upd2)编译器.

考虑到LU RD提到的质量控制报告,以及我自己对D2005的经验,这里有一些解决方法.我记得自己使用while循环解决方案.

1.将for循环写为while循环

var i: integer; begin i := 0; while i < FileNames.Count do begin ... inc(i); end; end;

2.从任何其他处理中单独保留for循环控制变量,并使用一个单独的变量,在循环中递增,用于字符串操作和FileNames索引.

var ctrl, indx: integer; begin indx := 0; for ctrl := 0 to FileNames.Count-1 do begin // use indx for string manipulation and FileNames indx inc(indx); end; end;

你暗示了一个解决方法,说没有代码优化循环迭代正确.假设你有优化,在程序/函数之前关闭它({$O-}),之后再关闭({$O}).注意! Optimization指令只能用于至少整个过程/函数.