procedure TForm1.Button1Click(Sender: TObject);
var
x,y,z:integer;
begin
x:=0;
y:=0;
z:=2; z:=x div y;
end;这样尽然弹不出异常!!!!实在不解。
var
x,y,z:integer;
begin
x:=0;
y:=0;
z:=2; z:=x div y;
end;这样尽然弹不出异常!!!!实在不解。
Exceptions are handled within try...except statements. For example,try
X := Y/Z;
except
on EZeroDivide do HandleZeroDivide;
end;This statement attempts to divide Y by Z, but calls a routine named HandleZeroDivide if an EZeroDivide exception is raised.
var
x,y,z:integer;
begin
x:=0;
y:=0;
z:=2; z:=x div y;
end;
因为你的变量Z在赋值之后并没有使用,所以编译器在优化的过程中把你的最后两条语句干掉了,最后两条语句被干掉后,编译器又发现对X,Y的赋值后并没有使用,于是对X,Y的赋值语句也同样被优化掉了,你的工程实际上是空的,当然不会出异常了,改成以下的看看,肯定会出异常procedure TForm1.Button1Click(Sender: TObject);
var
x,y,z:integer;
begin
x:=0;
y:=0;
// z:=2; z:=x div y;
showmessage(inttostr(integer(z)));
end;
但我还有个问题:procedure TForm1.Button1Click(Sender: TObject);
var
x,y,z:integer;
begin
x:=10;
y:=0;
z:=1;
try
z:=x div y;
ShowMessage(inttostr(z));
except
on e:EDivByZero do ShowMessage(E.ClassName);
end;
end;它能出异常,但却不能被捕获!!!
,我刚才又试了,把编译选项里的,Code Optimization 去掉后,果然下面的代码弹出异常:procedure TForm1.Button2Click(Sender: TObject);
var
x,y,z:integer;
begin
x:=20;
y:=0;
z:=5;
z:=x div y;
//ShowMessage(IntToStr(z));
//x:=z+6;
end;