命名空間
變體
動作

前處理器

出自 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 起) 控制)。

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

[編輯] 註腳

  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++ 文件預處理器
English Deutsch 日本語 中文(简体) 中文(繁體)