名稱空間
變體
操作

預處理器

來自 cppreference.com
< c

預處理器在翻譯階段4執行,在編譯之前。預處理的結果是一個單獨的檔案,然後將其傳遞給實際的編譯器。

目錄

[編輯] 指令

預處理指令控制預處理器的行為。每個指令佔據一行,格式如下:

  • # 字元
  • 預處理指令(define, undef, include, if, ifdef, ifndef, else, elif, elifdef, elifndef(C23 起), endif, line, embed(C23 起), error, warning(C23 起), pragma 之一)[1]
  • 引數(取決於指令)
  • 換行符。

允許空指令(# 後跟換行符),且無任何效果。

[編輯] 功能

預處理器具有以下原始檔轉換功能:

  • 有條件地編譯原始檔的部分(由指令#if, #ifdef, #ifndef, #else, #elif, #elifdef, #elifndef(C23 起)#endif 控制)。
  • 替換文字宏,同時可能拼接或引用識別符號(由指令 #define#undef,以及運算子 ### 控制)
  • 包含其他檔案(由指令 #include 控制 並透過 __has_include 檢查(C23 起)
  • 導致錯誤 警告(C23 起)(分別由指令 #error#warning(C23 起) 控制)

預處理器的以下方面可以被控制:

  • 實現定義的行為(由指令 #pragma 和運算子 _Pragma(C99 起) 控制)
  • 可供預處理器使用的檔名和行資訊(由指令 #line 控制)

[編輯] 腳註

  1. 這些是標準定義的指令。標準沒有定義其他指令的行為:它們可能被忽略,具有某些有用的含義,或者使程式格式不正確。即使被忽略,它們也會在預處理器完成時從原始碼中刪除。一個常見的非標準擴充套件是指令#warning,它在編譯期間發出使用者定義的訊息。(直到 C23)

[編輯] 示例

[編輯] 參考

  • C23 標準 (ISO/IEC 9899:2024)
  • 6.10 預處理指令 (p: 待定)
  • C17 標準 (ISO/IEC 9899:2018)
  • 6.10 預處理指令 (p: 117-129)
  • C11 標準 (ISO/IEC 9899:2011)
  • 6.10 預處理指令 (p: 160-178)
  • C99 標準 (ISO/IEC 9899:1999)
  • 6.10 預處理指令 (p: 145-162)
  • C89/C90 標準 (ISO/IEC 9899:1990)
  • 3.8 預處理指令

[編輯] 另請參閱

C 文件 中的 預定義宏符號
C 文件 中的 宏符號索引
C++ 文件 中的 預處理器