预处理器
出自cppreference.com
< cpp
預處理器在編譯前的翻譯階段 4 執行。預處理的結果是單個文件,接下來它會被傳遞給實際編譯器。
指令
預處理指令控制預處理器的行為。每個指令占據一行並擁有下列���式:
#字符- 包含以下內容的序列:
- 換行符
|
|
(C++20 起) |
預處理指令不得來自宏展開。
#define EMPTY
EMPTY # include <file.h> // 不是预处理指令
能力
預處理器有能力翻譯源文件:
- 有條件編譯源文件的某些部分(由
#if、#ifdef、#ifndef、#else、#elif、#elifdef、#elifndef(C++23 起) 和#endif指令控制)。 - 替換文本宏,同時可能對標識符進行拼接或加引號(由
#define和#undef指令與#和##運算符控制)。 - 包含其他文件(由
#include指令控制並以__has_include檢查(C++17 起))。 - 導致錯誤或警告(C++23 起)(由指令
#error或#warning(C++23 起) 控制)。
能控制預處理器的下列方面:
缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
| 缺陷報告 | 應用於 | 出版時的行為 | 正確行為 |
|---|---|---|---|
| CWG 2001 | C++98 | 使用未由標準定義的預處理指令的行為不明確 | 受條件性支持 |
參閱
預定義宏符號的 C++ 文檔
| |
宏符號索引的 C++ 文檔
| |
預處理器的 C 文檔
|