一个form上放了个button,代码如下,编译点button,程序11111111111处的showmessage,是不是我的delphi还有什么没设置好的呢?
99我
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c : integer;begin
a := 10;
b := 10;
c := 0;try
a := b div c;
except
showmessage('123123');//1111111111111
end;end;
99我
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c : integer;begin
a := 10;
b := 10;
c := 0;try
a := b div c;
except
showmessage('123123');//1111111111111
end;end;
打掉几个字了
不过,如果在下面加上一句
Label1.Caption:=inttostr(a);
就会出现异常。
估计是因变量a在后面没有使用,故编译器优化后没有对a:=b div c 进行运算。
我把它写成这样:sHoWmEsSaGe都没问题啊
a := b div c;
被编译优化掉了,这属于无效运算
showmessage('123123');终于可以执行了
你们猜,接下来的输出是什么?
是10啊,为什么会这样?
还有一种情况是把程序改为;
.......
try
a := b div c;
showmessage(inttostr(a));//00000000000000
except
showmessage('123123');//1111111111111
end;
两处的showmessage都执行了
那为什么在后面加了个showmessage(inttostr(a));就可以做异常处理了呢?
难道编译器在发现后面的错误后,再反过头来又检查程序么?
好想不是这样啊
这到底是什么原因啊,不会是由于我的机器有本身的问题吧
我装的win2k advanced server,机器有两个cpu
当要使用a时,就不能忽略,所以产生异常。to xill(叶柄) :
编译的结果是保存下来的了
问题是可以得到解决,但是治标不治本啊!
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c : integer;begin
a := 10;
b := 10;
c := 0;try
a := b div c;
a := b div c;//再加一个就会处理了!
except
showmessage('123123');//1111111111111
end;end;
你真是个好学的好孩子!
不知你所说的治标不治本是何意思?如果编译器因为编译时发现你后面没有使用变量a,因此没有对a:=b div c进行编译。正常情况下,你会在后续的代码中使用变量a。这里何来不治本的问题?
PUSH EAX
PUSH ECX
MOV EAX, b
MOV ECX, c
CDQ
IDIV ECX
MOV A, EAX
POP ECX
POP EAX
end;