弟兄们请注意:这是不是"优化"在作怪?

longtusoft 2003-08-22 10:11:20
var
i,j:integer;
tempstr:string;
Begin
For i:=0 to 100 do
begin
tempstr:='';
for j:=0 to Const1 do //Const1 是在其他单元中定义的常量值为64
tempstr:=tempstr+chrarray[j];
//CHRARRAY在其他单元的定义是:ARRAY [0..49] OF CHAR;
end;
end;
针对上面小程序发现两个问题:
1.调试时,用WATCH查看I值时,不允许查看;
2.为什么DELPHI不给出数组越界提示呢?
本人分析可能是DELPHI编译器的"优化"所致,可是关闭该选项后并没有什么变化?请问到底是怎么回事? 谢谢!



...全文
85 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxpbuaa 2003-08-22
  • 打赏
  • 举报
回复
1、在Pascal中,循环变量不允许在循环过程中被修改,因此在Watch中也不允许查看。
2、因为此时没有打开越界检查这个编译器指令。如果程序改为:
{$R+}
for i:=0 to 3 do
begin
tempstr:='';
for j:=0 to 64 do
tempstr:=tempstr+chrarray[j];
end;
{$R-}
你可以看到运行时越界异常了。
这两个问题都跟编译器的优化没有关系。

—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧