この構成を使用して、Delphiのスイッチディレクティブの現在の状態を確認できることを知っています。
{$IFOPT R+}
Writeln('Compiled with range-checking');
{$ENDIF}
Delphiバックエンドコンパイラがどのように機能するかについての詳細な情報源が不足しているため、関数を呼び出すコード行のスイッチディレクティブの状態に応じて関数の動作を変更する方法があるかどうかはわかりません。次のようになります。
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はディレクティブを使用する必要はありませんが、これが進むべき道だと思いました。