共用方式為


編譯器指示詞 (F#)

本主題描述處理器指示詞和編譯器指示詞。

前置處理器指示詞

前置處理器指示詞使用 # 符號當做前置字元,會單獨出現在一行。 它是由在編譯器之前執行的前置處理器來解譯。

下表列出 F# 中可用的前置處理器指示詞。

指示詞

描述

#if symbol

支援條件式編譯。 如果有定義 symbol,則會包含 #if 後面區段中的程式碼。

#else

支援條件式編譯。 如果未定義先前與 #if 一起使用的符號,則會標記要包含的程式碼區段。

#endif

支援條件式編譯。 標記條件式程式碼區段的結尾。

#[line] int、#[line] int string、#[line] int verbatim-string

表示原始程式碼行和檔案名稱,做為偵錯之用。 這項功能是提供產生 F# 原始程式碼的工具使用。

條件式編譯指示詞

由上述其中一個指示詞所停用的程式碼,在 Visual Studio 程式碼編輯器中會呈現暗灰色。

注意事項注意事項

條件式編譯指示詞的行為與其他語言中的行為不同。 例如,您不可以使用包含符號的布林運算式,而且 true 和 false 也沒有特殊意義。 #if 指示詞中所使用的符號必須由命令列或以專案設定來定義,因此沒有 #define 前置處理器指示詞。

在下列程式碼中,會示範 #if、#else 和 #endif 指示詞的用法。 在此範例中,程式碼包含兩個 function1 定義版本。 如果 VERSION1 是使用 -define 編譯器選項定義,則會啟動 #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 指示詞所使用的符號。

條件式編譯指示詞可以是巢狀。 縮排對前置處理器指示詞而言並不重要。

程式碼行指示詞

建置時,編譯器會參考每個錯誤發生的行號,報告 F# 程式碼錯誤。 行號從 1 開始,1 表示檔案中的第一行。 但如果從另一個工具產生 F# 原始程式碼,所產生程式碼中的行號通常不值得關注,因為所產生 F# 程式碼中的錯誤很可能來自其他來源。 #line 指示詞提供一種方式,讓產生 F# 原始程式碼的工具作者將原始行號和原始程式檔的相關資訊傳遞至所產生的 F# 程式碼。

使用 #line 指示詞時,檔案名稱必須括在引號中。 除非逐字語彙基元 (@) 出現在字串前,否則您必須使用兩個反斜線字元 (而不是一個) 來逸出反斜線字元,才能在路徑中使用。 以下是有效的程式碼行語彙基元。 在這些範例中,假設原始檔案 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 行 (或前後幾行) 的某些建構。

編譯器指示詞

編譯器指示詞類似前置處理器指示詞,也是使用 # 符號當做前置字元,但編譯器指示詞並不是由前置處理器解譯,而是由編譯器解譯及處理。

下表列出 F# 中可用的編譯器指示詞。

指示詞

描述

#light ["on"|"off"]

啟用或停用輕量型語法,以與其他 ML 版本相容。 輕量型語法預設為啟用。 詳細語法則永遠會啟用。 因此,您可以同時使用輕量型語法和詳細語法。 指示詞 #light 本身即相當於 #light "on"。 如果您指定 #light "off",則必須對所有語言建構使用詳細語法。 在呈現 F# 文件中的語法時,會假設您使用輕量型語法。 如需詳細資訊,請參閱 詳細語法 (F#)

如需解譯器 (fsi.exe) 指示詞的詳細資訊,請參閱 F# Interactive (fsi.exe) 參考

請參閱

其他資源

F# 語言參考

編譯器選項 (F#)