質問

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;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top