如何关闭文件的一部分范围检查.关闭很简单,但如何在以后恢复到项目设置?下面的伪代码应该解释它:
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) 我有一些导致下溢的代码:
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, …