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

Gie*_*iel 13 delphi project-settings range-checking

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

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)

Ser*_*yuz 41

请参阅:IFOPT指令.

{$IFOPT R+}
  {$DEFINE RANGEON}
  {$R-}
{$ELSE}
  {$UNDEF RANGEON}
{$ENDIF}
//range checking is off here because the code causes range check errors
//code here...
{$IFDEF RANGEON}
  {$R+}
  {$UNDEF RANGEON}
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)

  • 为了完全安全,如果未启用范围检查,则应该UNDEF RANGEON.否则,在使用/ $ R-/dRANGEON编译时,代码将不正确地启用范围检查. (3认同)

Rob*_*edy 5

将您的代码包装在$R指令中:

{$R-} // disable range checking
// do non-range-checked operations here
{$R+} // turn range checking back on
Run Code Online (Sandbox Code Playgroud)

请注意,该指令适用于语句级别。你不能只用它来包装表达式的一部分。

  • 您可能希望在发布版本中禁用它,但在所有其他时间启用它。特别是对于您用来运行测试的构建。 (5认同)
  • @dangph 使发布的版本运行得更快 (5认同)
  • Sertac 的回答涵盖了这一点——检查它是否打开,并设置一个符号。然后检查符号并有条件地恢复原始设置。但是您缺少的是,您不应该首先在项目选项中禁用它。**它会捕捉错误。** (4认同)
  • @David Heffernan,关键是您可以在需要使用 {$R-} 的地方在本地关闭它。但是您可以在项目设置中全局保留它。 (4认同)
  • 为什么要在发布版本中关闭它? (3认同)