编译的时候没有错误,可是执行的时候有个语句就是不执行而是跳过,我觉得很奇怪,以前也碰到过!(100分)

  • 主题发起人 主题发起人 Bkhswrp
  • 开始时间 开始时间
B

Bkhswrp

Unregistered / Unconfirmed
GUEST, unregistred user!
具体代码是这样的:
type
tt=array of real;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure haha(var a:tt);
public
{ Public declarations }
end;
var
Form1: TForm1;

implementation
{$R *.DFM}
procedure TForm1.haha(var a:tt);
begin
SetLength(a,10);
a[0]:=100;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
wang:tt;
pei:real;
begin
haha(wang);
wang[0]:=pei;
Pei:=1
//不执行
pei:=wang[0];//也不执行
showmessage(inttostr(high(wang)));//显示为9
end;

end.
 
不执行的两句是无效语句,给优化编译了.
 
因为便一起进行了优化,你这个Pei没有使用过,所以他就跳过这一行了。
 
编译的时侯应该有hint/warning的呀
你不仅要看编译的Error,也要看hint/warning
 
warning会告诉你pei has never been used
 
其实你编译的时候,左边会有蓝色的小点。

没有标注蓝色小点的,都不会被执行到的。

这样的往往是被优化了的,同时warning中会有相应的提示。
 
Delphi编译器会对没有用到的变量进行优化处理,尽管你对他赋值,但没有使用,所以设置
断点不会执行.
 
优化掉了。
 
同意樓上諸位,個人認為在編譯時不僅僅看沒有error,同時要看沒有hint或者warining,
這三項指數應該都為0才能算是完成了的代碼。
 
Delphi的优化一般是从下往上的,首先倒数第二句
pei:=wang[0];
编译器发觉对pei的赋值后,并没有再对pei使用,所以这句优化后不执行.然后到
Pei:=1

编译器发觉后面有一个对pei的赋值,而且两个赋值之间没有对pei的任何操作,忽略.
所以两个语句都没有执行.
可以使用Project/Options的Complier页去掉Optimization的复选即可执行以上两句
 
肯定执行了,你的跟踪有问题!!!!!!!!
你的 pei 都没有初始化。
 
给分吧,兄弟。
 
是你的环境有问题!将*。DCU文件删除,再跟踪!:)
 
是你的环境有问题!将*。DCU文件删除,再跟踪!:)

 
多人接受答案了。
 
后退
顶部