我知道,我可以用这个结构检查德尔福的开关指令的当前状态:(德尔福)检查状态
{$IFOPT R+}
Writeln('Compiled with range-checking');
{$ENDIF}
由于我缺乏深入有关Delphi后端编译器如何工作的资料,我不确定是否有改变函数行为的方法,这取决于调用它的代码行中的switch指令的状态。它看起来是这样的:
procedure P1;
begin
{$I+}
P3;
{$I-}
end;
// ** state of I unknown
procedure P2;
begin
{$I-}
P3;
{$I+}
end;
// ** state of I unknown
procedure P3;
begin
// Something like {$IFOPT I+}, but at the state P3 is called
DoThis;
{$ELSE}
DoThat
{$ENDIF}
end;
我正在为遗留代码编写适配器,我迫切希望不会被改动。 P3不需要使用指令,但我认为这是要走的路。
我想到了,但这正是我想要避免的: -/ – kaeff 2009-08-17 19:59:05
@kaeff也许如果你说出为什么要避免这种解决方案,那么你可以得到另一个。如果您可以更改P3的主体,但不更改参数列表,请使用变量。或者当你不能确保所有的调用者都合作时,你可以引发一个范围违规并检查是否抛出异常。 – 2009-08-18 08:02:27