預處理器
來自 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++ 文件 中的 預處理器
|