预处理器
来自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 | 使用未由标准定义的预处理指令的行为不明确 | 受条件性支持 |