在德爾福如何檢測Int64
的溢出錯誤?德爾福 - 檢測Int64溢出錯誤
對於整數我們可以這樣做:
type
MyInt = Integer; //Int64
function TryMaxTimes10(out Res: MyInt): boolean;
var
a, b: MyInt;
begin
{$Q+}
try
a := High(MyInt);
b := 10;
Res := a * b; //REF1
Result := True;
except
Result := False;
end;
{$Q-}
end;
對於MyInt = Integer
,線REF1給出了一個例外,因此TryMaxTimes10
回報false
。
但是,如果我們將MyInt更改爲MyInt = Int64
,那麼REF1不會例外,並且TryMaxTimes10
返回true
!
我明白,{$Q+}
幫助沒有具體提及Int64
:... {$Q+} state, certain integer arithmetic operations ... are checked for overflow
。
問題:所以我的問題是,我們如何檢測Int64的溢出錯誤?
(我用Delphi 7做同樣的事情在Delphi的新版本出現?)
正在進一步調查中似乎有在__llmulo(system.pas)的錯誤。 – mas 2012-07-05 13:43:39
我在這裏找到了一種(有點)解決方法:http://qc.embarcadero.com/wc/qcmain.aspx?d=34049,我可以使用類似的Fastcode來修補__llmulo。問題是,解決方法代碼可能包含錯誤(請參閱QA頁面中的進一步註釋)。有人有睾丸/工作__llmulo? – mas 2012-07-05 20:21:25