コンパイラ ディレクティブ
このトピックでは、プロセッサ ディレクティブとコンパイラ ディレクティブについて説明します。
F# インタラクティブ (dotnet fsi
) ディレクティブについては、F# を使用した対話型のプログラミングに関するページを参照してください。
プリプロセッサ ディレクティブ
プリプロセッサ ディレクティブは、# シンボルで始まり、独立した行に記述されます。 プリプロセッサ ディレクティブは、コンパイラ自体の前に実行されるプリプロセッサにより解釈されます。
次の表に、F# で使用できるプリプロセッサ ディレクティブの一覧を示します。
ディレクティブ | 説明 |
---|---|
#if symbol |
条件付きコンパイルをサポートします。 symbol が定義されている場合、#if の後ろのセクションのコードが含まれます。 symbol は ! で否定することもできます。 |
#else |
条件付きコンパイルをサポートします。 前の #if で使用したシンボルが定義されていない場合に含めるコードのセクションをマークします。 |
#endif |
条件付きコンパイルをサポートします。 コードの条件付きセクションの末尾をマークします。 |
# [line] int、# [line] int string、# [line] int verbatim-string |
デバッグ用に、元のソース コードの行とファイル名を示します。 この機能は、F# ソース コードを生成するツール用に用意されています。 |
#nowarn warningcode |
コンパイラ警告を無効にします。 警告を無効にするには、コンパイラ出力で警告の番号を確認し、その番号を引用符で囲んで指定します。 "FS" プレフィックスを省略します。 1 つの行で複数の警告番号を無効にするには、それぞれの番号を引用符で囲んだうえで各文字列をスペースで区切ります。 例: #nowarn "9" "40" |
警告を無効にした場合、ファイル内でそのディレクティブの前にある部分を含めて、ファイル全体にその影響が及びます。
条件付きコンパイル ディレクティブ
これらのディレクティブのいずれかによって非アクティブにされたコードは、Visual Studio Code エディターで淡色表示になります。
注意
条件付きコンパイル ディレクティブの動作は、他の言語と同じではありません。 たとえば、シンボルを含むブール式を使用することはできません。また、true
および false
には特別な意味はありません。 if
ディレクティブで使用するシンボルは、コマンド ラインまたはプロジェクト設定で定義する必要があります。define
プリプロセッサ ディレクティブは存在しません。
次のコードは、#if
ディレクティブ、#else
ディレクティブ、および #endif
ディレクティブの使用例を示しています。 この例では、function1
の定義の 2 つのバージョンがコードに含まれています。 -define コンパイラ オプションを使用して VERSION1
を定義した場合、#if
ディレクティブと #else
ディレクティブの間にあるコードがアクティブになります。 それ以外の場合、#else
と #endif
の間にあるコードがアクティブになります。
#if VERSION1
let function1 x y =
printfn "x: %d y: %d" x y
x + 2 * y
#else
let function1 x y =
printfn "x: %d y: %d" x y
x - 2*y
#endif
let result = function1 10 20
F# には、#define
プリプロセッサ ディレクティブはありません。 #if
ディレクティブで使用するシンボルを定義するには、コンパイラ オプションまたはプロジェクト設定を使用する必要があります。
条件付きコンパイル ディレクティブは、入れ子にすることができます。 プリプロセッサ ディレクティブでは、インデントに意味はありません。
symbol は !
で否定することもできます。 この例では、文字列の値は、デバッグして "いない" ときだけ、何かになります。
#if !DEBUG
let str = "Not debugging!"
#else
let str = "Debugging!"
#endif
行ディレクティブ
ビルド時にコンパイラは、各エラーが発生した行番号を参照して、F# コード内のエラーを報告します。 これらの行番号は、ファイル内の最初の行から 1 で始まります。 ただし、別のツールから F# ソース コードを生成している場合、生成されたコードの行番号は、通常、重要ではありません。これは、生成された F# コード内のエラーは、別のソースから発生する可能性が高いためです。 #line
ディレクティブを使用すると、F# ソース コードを生成するツールの作成者が、元の行番号およびソース ファイルに関する情報を、生成された F# コードに渡すことができます。
#line
ディレクティブを使用する場合、ファイル名を引用符で囲む必要があります。 パスでバックスラッシュ文字を使用するには、文字列の前に逐語的トークン (@
) がある場合を除き、バックスラッシュ文字をエスケープする必要があります。エスケープするには、バックスラッシュ文字を 1 つではなく、2 つ使用します。 有効な行トークンを次に示します。 これらの例では、ツールを使用して元のファイル Script1
を実行したときに F# コード ファイルが自動生成され、これらのディレクティブがある位置のコードが Script1
ファイルの 25 行目のトークンから生成されるものと仮定します。
# 25
#line 25
#line 25 "C:\\Projects\\MyProject\\MyProject\\Script1"
#line 25 @"C:\Projects\MyProject\MyProject\Script1"
# 25 @"C:\Projects\MyProject\MyProject\Script1"
これらのトークンは、この場所で生成された F# コードが、Script1
内の行 25
またはその近くにあるなんらかの構成要素から派生したことを示します。
関連項目
.NET