相关疑难解决方法(0)

仅关闭一小部分代码的Delphi范围检查

如何关闭文件的一部分范围检查.关闭很简单,但如何在以后恢复到项目设置?下面的伪代码应该解释它:

Unit1;

//here's range checking on or off as per the project setting

code here...

{$R-}

//range checking is off here because the code causes range check errors

code here...

//now I want to revert to the project setting. How do I do that?

code here...

end.
Run Code Online (Sandbox Code Playgroud)

delphi project-settings range-checking

13
推荐指数
2
解决办法
4163
查看次数

Delphi:如何使用$ OVERFLOWCHECKS OFF来禁用溢出检查?

我有一些导致下溢的代码:

var
    t1, t2, delta: DWORD:
begin
   t1 := 0xffffff00;
   t2 := 0x00000037;

   delta := (t2 - t1);
Run Code Online (Sandbox Code Playgroud)

减法本身确实会产生溢出(下溢),但我不希望Delphi抛出EIntOverflow异常.所以我尝试通过禁用溢出检查来禁用溢出检查代码的生成:

var
    t1, t2, delta: DWORD:
begin
   t1 := 0xffffff00;
   t2 := 0x00000037;

{$OVERFLOWCHECKS OFF}
   delta := (t2 - t1);
{$OVERFLOWCHECKS ON}
Run Code Online (Sandbox Code Playgroud)

然而即使有了OVERFLOWCHECKS OFF选项,它仍然会引发异常.生成的代码仍然包含检查:

替代文字http://i43.tinypic.com/intmrl.jpg

提醒文档$Q:

溢出检查

类型切换
语法 {$ Q +}或{$ Q-}
{$ OVERFLOWCHECKS ON}或{$ OVERFLOWCHECKS OFF}
默认 {$ Q-}
{$ OVERFLOWCHECKS OFF}
范围本地

备注

$ Q指令控制溢出检查代码的生成.在{$ Q +}状态下,检查某些整数算术运算(+, - ,*,Abs,Sqr,Succ,Pred, …

delphi integer-overflow delphi-5

6
推荐指数
1
解决办法
2994
查看次数