預處理器
來自 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 起) 控制)
預處理器的以下方面可以被控制:
[編輯] 腳註
- ↑ 這些是標準定義的指令。標準沒有定義其他指令的行為:它們可能被忽略,具有某些有用的含義,或者使程式格式不正確。即使被忽略,它們也會在預處理器完成時從原始碼中刪除。一個常見的非標準擴充套件是指令#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++ 文件 中的 預處理器
|