Ian*_*oyd 6 delphi integer-overflow delphi-5
我有一些导致下溢的代码:
var
    t1, t2, delta: DWORD:
begin
   t1 := 0xffffff00;
   t2 := 0x00000037;
   delta := (t2 - t1);
减法本身确实会产生溢出(下溢),但我不希望Delphi抛出EIntOverflow异常.所以我尝试通过禁用溢出检查来禁用溢出检查代码的生成:
var
    t1, t2, delta: DWORD:
begin
   t1 := 0xffffff00;
   t2 := 0x00000037;
{$OVERFLOWCHECKS OFF}
   delta := (t2 - t1);
{$OVERFLOWCHECKS ON}
然而即使有了OVERFLOWCHECKS OFF选项,它仍然会引发异常.生成的代码仍然包含检查:
替代文字http://i43.tinypic.com/intmrl.jpg
提醒文档$Q:
溢出检查
类型切换
语法 {$ Q +}或{$ Q-}
{$ OVERFLOWCHECKS ON}或{$ OVERFLOWCHECKS OFF}
默认 {$ Q-}
{$ OVERFLOWCHECKS OFF}
范围本地备注
$ Q指令控制溢出检查代码的生成.在{$ Q +}状态下,检查某些整数算术运算(+, - ,*,Abs,Sqr,Succ,Pred,Inc和Dec)是否溢出.每个这些整数算术运算的代码后面都有附加代码,用于验证结果是否在支持的范围内.如果溢出检查失败,则引发EIntOverflow异常(或者如果未启用异常处理,程序将终止).
$ Q开关通常与$ R开关一起使用,它启用和禁用范围检查代码的生成.启用溢出检查会降低程序速度并使其更大,因此仅使用{$ Q +}进行调试.
我如何使用$OVERFLOWCHECKS OFF禁用溢出检查代码的生成?
梅森的回答奏效了.修订后的代码是:
var
    t1, t2, delta: DWORD:
begin
   t1 := 0xffffff00;
   t2 := 0x00000037;
   delta := Subtract(t2, t1);
{$OVERFLOWCHECKS OFF}
function Subtract(const B, A: DWORD): DWORD; //subtract B-A
begin
   {
      Disabling overflow checking does not work at the line level,
      only the routine level. 
      Hence the function to subtract two numbers.
   }
   Result := (B-A);
end;
{$OVERFLOWCHECKS ON}
对于Google抓取工具,备用问题措辞:如何暂时禁用Delphi中的溢出检查?
Mas*_*ler 13
它在行级别不起作用.您需要为整个功能关闭它.
| 归档时间: | 
 | 
| 查看次数: | 2994 次 | 
| 最近记录: |