Delphi コンパイラ指令

提供: RAD Studio
移動先: 案内検索

Delphi コンパイラ指令のリスト:インデックス への移動

各 Delphi コンパイラ指令は次のいずれかに分類されます。

コンパイラ指令は特殊な構文のコメントです。コンパイラ指令は、コメント開始区切り記号の後に $(ドル記号)を先頭文字として始まり、そのすぐ後に、特定の指令を指定する名前(1 文字以上)が続きます。指令と必要なパラメータの後には、コメントを記述できます。

コンパイラ指令は、コメントを記述できる場所ならどこにでも記述できます。なお、二重スラッシュ(//)で始まるコメントはコンパイラ指令には使用できないことに注意してください。次に例を示します。

{$hints off}        // Delphi コンパイラ指令
(*$hints off*)      // Delphi コンパイラ指令
//$hints off        // 単なるコメント(無視される)

スイッチ指令を除くすべての指令は、指令名とパラメータの間に少なくとも 1 つのスペースが必要です。

これら 3 種類の指令を、以下の節で説明します。

スイッチ指令

スイッチ指令は、特定のコンパイラ機能をオン(有効)またはオフ(無効)にします。この指令は、以下のように、同等の働きをする 1 文字か、長い名前のどちらかを使って指定することができます。

  • 1 文字バージョンの場合は、指令文字の直後に + か - のどちらかを付け加えます。たとえば、{$A+} などと指定します。
  • 長いバージョンの場合は、"on" または "off" という単語を付け加えます。たとえば、{$ALIGN ON} などと指定します。

スイッチ指令には、グローバル指令とローカル指令があります。

  • グローバル指令はコンパイル全体に影響を及ぼします。コンパイルするプログラムまたはユニットの宣言部の前に記述する必要があります。
  • ローカル指令は、その指令から同じ指令の次の出現箇所までのコンパイル部分にのみ影響を及ぼします。どこにでも記述することができます。

間にスペースを入れずにコンマで区切ることで、複数のスイッチ指令を単一のコンパイラ指令コメントにまとめることができます。次に例を示します。

{$B+,R-,S-}

この一括指定は長い名前の指令には機能しません。この場合は、個別に指定する必要があります。次に例を示します。

{$optimization on,hints off}        // "," 以降の部分は、ここではコメントのように扱われる

パラメータ指令

パラメータ指令は、コンパイルに影響を及ぼすパラメータ(ファイル名やメモリ サイズなど)を指定します。

条件指令

条件指令を使用すると、指定された条件(ユーザー定義の条件シンボルなど)に基づいて、コードの一部分をコンパイルするかどうかが決まります。

コンパイル指令の例を以下に示します。

{$B+}
{$R- Turn off range checking}
{$I TYPES.INC}
{$M 32768,40960}
{$DEFINE Debug}
{$IFDEF Debug}
{$ENDIF}

コンパイラ指令のさまざまな入力方法

メモ: ソース コードに埋め込まれた指令は、コマンド ラインや[プロジェクト|オプション...|Delphi コンパイラ|コンパイルで指定された指令よりも優先されます。

ソース コードでの指定

コンパイラ指令は直接ソース コード内に挿入できます。

Math.pas ファイル(製品の \source ディレクトリ配下にあります)における条件付きコンパイルの例を以下に示します。

 procedure DivMod(Dividend: Cardinal; Divisor: Word;
   var Result, Remainder: Word);
 {$IFDEF PUREPASCAL}
 begin
   Result := Dividend div Divisor;
   Remainder := Dividend mod Divisor;
 end;
 {$ELSE !PUREPASCAL}
 {$IFDEF X86ASM}
 asm // StackAlignSafe
         PUSH    EBX
         MOV     EBX,EDX
         MOV     EDX,EAX
         SHR     EDX,16
         DIV     BX
         MOV     EBX,Remainder
         MOV     [ECX],AX
         MOV     [EBX],DX
         POP     EBX
 end;
 {$ENDIF X86ASM}
 {$ENDIF !PUREPASCAL}

コマンドライン スイッチを使用した指定

さらに、コマンドライン コンパイラ(dcc32)や IDE(bds.exe)で -$directive スイッチを使ってデフォルト指令を変更することもできます。

コマンドライン コンパイラを使用する場合、コンパイラ指令をコマンドラインで指定できます。次に例を示します。

DCC32 -$R+ MYPROG

IDE を使用した指定

コンパイラ指令の多くは、[プロジェクト|オプション...|Delphi コンパイラ|コンパイルダイアログ ボックスで設定できます。[コンパイル]ページで設定を変更すると、そのプロジェクトのそれ以降のコンパイルでユニットのソース コードを再コンパイルするたびに、それらのすべてのユニットが設定変更の影響を受けます。コンパイラ スイッチを変更してコンパイルした場合、ソース コードのあるすべてのユニットが新しい設定で再コンパイルされます。

コード エディタでの作業中に、有効になっているコンパイラ指令を手っ取り早く確認したい場合は、Ctrl+O+O キーを押します。指令の現在の設定が、コンパイラ警告($WARN 指令 の設定)などの他の現行設定と共に、ファイルの冒頭に 1 行ずつ挿入されます。これらのリストは、[元に戻す]操作(Ctrl+Z)を行わないかリストを手動で削除しない限り、ソース ファイルの先頭に追加されます。

Directives.png

関連項目