我用DELPHI7的版本,写的程序如下
procedure TForm1.Button2Click(Sender: TObject);
var i1,x1 ,y1,z1,sum1 :integer ;
begin
x1:=25;
y1:=10;
if x1<y1 then
z1:=x1
else
z1:=y1;
sum1:=0;
for i1:=1 to 10 do
sum1:=sum1+1;
end;
不执行if语句和FOR语句,一定要把放在如下的部分程序能正常执行了.请叫高手这是什么原因?
var
Form1: TForm1;
i:integer;
x,y,z,sum:integer;
implementation
procedure TForm1.Button2Click(Sender: TObject);
var i1,x1 ,y1,z1,sum1 :integer ;
begin
x1:=25;
y1:=10;
if x1<y1 then
z1:=x1
else
z1:=y1;
sum1:=0;
for i1:=1 to 10 do
sum1:=sum1+1;
end;
不执行if语句和FOR语句,一定要把放在如下的部分程序能正常执行了.请叫高手这是什么原因?
var
Form1: TForm1;
i:integer;
x,y,z,sum:integer;
implementation
procedure TForm1.Button2Click(Sender: TObject);
var i1,x1 ,y1,z1,sum1 :integer ;
begin
x1:=25;
y1:=10;
if x1 <y1 then
z1:=x1
else
z1:=y1;
sum1:=0;
for i1:=1 to 10 do
sum1:=sum1+1; showMessage(inttostr(sum1));
showMessage(inttostr(z1));
end; 这样看,执不执行?? 呵呵
而如果放在implementation前面,是全局变量,别的地方可能有用,所以编译器老老实实地编译执行。
x1:=25;
y1:=10;
if x1 <y1 // 编译器在此判断后,进行优化处理,除去then后一句(废句)只执行else后一句
then z1:=x1
else z1:=y1;
sum1:=0;
for i1:=1 to 10 do // 编译器在此判断后,进行优化处理,在此与sun1:=10等值,故优化处理了。
sum1:=sum1+1;
end;
这就是Delphi IDE的优越性。采用等效而简化机器码。
0044E1CC B819000000 mov eax,$00000019
Unit1.pas.32: y1:=10;
0044E1D1 BA0A000000 mov edx,$0000000a
Unit1.pas.33: if x1 <y1 then
0044E1D6 3BD0 cmp edx,eax
Unit1.pas.38: for i1:=1 to 10 do
0044E1D8 B80A000000 mov eax,$0000000a
0044E1DD 48 dec eax
0044E1DE 75FD jnz -$03
Unit1.pas.42: end;
0044E1E0 C3 ret
看看这个就明白了,DELPHI是一个聪明的编译器。