我知道,我可以用這個結構檢查德爾福的開關指令的當前狀態:(德爾福)檢查狀態
{$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