Delphi #IF(DEBUG)相当?
-
02-07-2019 - |
質問
DelphiでC##if(DEBUG)コンパイラディレクティブに相当するものはありますか?
解決
これを使用:
{$IFDEF DEBUG}
...
{$ENDIF}
他のヒント
lassevkが言ったこととは別に、コンパイラー評価の他のいくつかの方法を使用することもできます(Delphi 6以降、私は信じています):
{$IF NOT DECLARED(SOME_SYMBOL)}
// Mind you : The NOT above is optional
{$ELSE}
{$IFEND}
コンパイラにこの機能があるかどうかを確認するには、次を使用します。
{$IFDEF CONDITIONALEXPRESSIONS}
これにはいくつかの用途があります。
たとえば、RTLのバージョンを確認できます。 Delphiヘルプから:
$ IFでRTLVersionを使用できます ランタイムをテストする式 ライブラリのバージョンレベルは独立して コンパイラのバージョンレベル。
例:{$ IF RTLVersion> = 16.2} ... {$ IFEND}
また、コンパイラのバージョン自体も、コードから確認できます:
CompilerVersionには値が割り当てられます システムユニットが コンパイル済み。リビジョンを示します コンパイラ機能のレベル/ 進化する可能性のある言語構文 RTLVersionとは無関係。 CompilerVersionは$ IFでテストできます 式と使用する必要があります VERxxxをテストする代わりに 条件付き定義。常にテストする 既知の値より大きいまたは小さい 改訂レベル。それは悪い考えです 特定の改訂レベルをテストします。
私が定期的に行っているもう1つのことは、次のように、まだ定義されていないシンボルを定義することです(前方互換性に適しています):
{$IF NOT DECLARED(UTF8String)}
type
UTF8String = type AnsiString;
{$IFEND}
これがお役に立てば幸いです!
DebugHookは、アプリケーションがIDEデバッガーで実行されている場合に設定されます。コンパイラ指令と同じではありませんが、それでもかなり便利です。例:
ReportMemoryLeaksOnShutdown := DebugHook <> 0; // show memory leaks when debugging
これらの制御ディレクティブは利用可能です:
{$IFDEF}
{$ELSE}
{$ENDIF}
{$IFNDEF} //if *not* defined
そしてここに示すように使用できます:
procedure TfrmMain.Button1Click(Sender: TObject);
begin
{$IFDEF MY_CONDITIONAL}
ShowMessage('my conditional IS defined!');
{$ELSE}
ShowMessage('my conditional is NOT defined!');
{$ENDIF}
{$IFNDEF MY_CONDITIONAL}
ShowMessage('My conditional is explicitly NOT defined');
{$ENDIF}
end;