22

C# の #if(DEBUG) コンパイラ ディレクティブに相当する Delphi はありますか?

4

4 に答える 4

33

これを使って:

{$IFDEF DEBUG}
...
{$ENDIF}
于 2008-09-29T06:38:19.687 に答える
8

DebugHookは、アプリケーションがIDEデバッガーで実行されている場合に設定されます。コンパイラ指令と同じではありませんが、それでもかなり便利です。例えば:

ReportMemoryLeaksOnShutdown := DebugHook <> 0; // show memory leaks when debugging
于 2009-10-15T14:06:26.760 に答える
8

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} 

お役に立てれば!

于 2008-09-29T07:54:09.863 に答える
3

これらの制御ディレクティブが使用可能です。

{$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;
于 2008-09-30T13:36:34.617 に答える