15

コードでDelphiディレクティブを使用すると、次のようになります。

{$IFDEF something}
.
.
.
{$ENDIF}

プロジェクトのどこに「何か」という単語を割り当てますか?プロジェクトオプションのいくつかの場所で試しましたが、機能しませんでした。正しいものが見つからなかったと思います。

4

5 に答える 5

19

プロジェクト|の下の条件付き定義スロットにあります。D2010では次のようなオプション:

Delphiプロジェクトオプションダイアログ

于 2010-12-25T12:57:36.550 に答える
14

他の回答は、シンボルを定義する場所と、さまざまなアプローチの範囲への影響を示しています。

ただし、誰もまだ言及していないのは、DEFINEシンボルを変更した場合、コードに影響を与えるには、プロジェクトを完全に構築する必要があるということです。

「コンパイル」すると、Delphiコンパイラは、前回のコンパイル以降に変更されたユニットのみをコンパイルします。DEFINEシンボルを変更しても、プロジェクトユニットは変更されないため、ユニットが再コンパイルされない場合、DEFINEシンボルの変更はそれらのユニットに影響を与えません。

すべてのユニットに適用されるDEFINEシンボルの変更を強制するには、コンパイルではなく「ビルド」する必要があります。

これは、定義を設定する試みが以前は機能していないように見えた理由を説明している可能性があります

于 2010-12-26T03:17:10.310 に答える
12

{$DEFINE<symbol>}ディレクティブでそれらを定義することもできます。変更されるのはスコープです。プロジェクトオプションの条件付き定義で<symbol>を定義すると、スコープはプロジェクト全体に対してグローバルになります。$ DEFINEディレクティブは、宣言された時点から現在のモジュールの最後まで、または同じ<symbol>を使用する$UNDEFディレクティブが検出されるまでのみ有効です。何を使用するかは、ニーズとIFDEFの機能によって異なります。

于 2010-12-25T19:54:12.890 に答える
9

プロジェクトのすべてのユニットで使用される条件付き定義を配置できる場所は2つあります。

  1. プロジェクトオプションで(David Heffernanがすでに言ったように)
  2. これらすべてのユニットに含まれているインクルードファイル内

なぜ2番目のオプションについて言及するのですか?これは、VERxxx条件付き定義および1で指定された他の条件付き定義に基づく特殊な処理を可能にするためです。例については、jedi.inc(Jedi JCLから)を参照してください。

また、Delticsが述べたように、再コンパイルするユニットを決定するとき、コンパイラはユニット自体が変更されたかどうかのみをチェックし、条件付き定義またはインクルードファイルが変更されたかどうかはチェックしません。したがって、条件付き定義を変更する場合は、再コンパイルだけでなく、再構築を行う必要があります。Delphiコンパイラは非常に高速であるため、幸いなことに、コンパイル時間に大きな違いはありません。

于 2010-12-26T11:56:28.947 に答える
6

拡張子が.incの外部ファイルでグローバルシンボルを定義できます。新しいテキストファイルを作成し、定義したものをすべて入れて、たとえばPredefines.incとして保存します。

---ファイルPredefines.incの内容---

{$DEFINE Symbol}
{$IFDEF Symbol}
  {$DEFINE AnotherSymbol}
{$ENDIF}

シンボルが定義されていることを確認する必要があるDelphiモジュールでは、次のコードをインターフェイスセクションに配置します。

interface

{$I Predefines.inc}

uses ...

// Check you defines

{$IFDEF Symbol}
...
{$ENDIF}
于 2014-04-16T07:43:45.857 に答える