预处理器
来自 cppreference.com
< cpp
预处理器在翻译阶段 4执行,在编译之前。预处理的结果是一个单独的文件,然后传递给实际的编译器。
内容 |
[编辑] 指令
预处理指令控制预处理器的行为。每个指令占一行,格式如下
- the # 字符。
- 一个序列
- 换行符。
模块和导入指令 也是预处理指令。 |
(自 C++20 起) |
预处理指令不得来自宏展开。
#define EMPTY EMPTY # include <file.h> // not a preprocessing directive
[编辑] 功能
预处理器具有源文件翻译功能
- 有条件地 编译源文件的部分(由指令 #if、#ifdef、#ifndef、#else、#elif、#elifdef、#elifndef(自 C++23 起) 和 #endif 控制)。
- 替换 文本宏,同时可能连接或引用标识符(由指令 #define 和 #undef 以及运算符 # 和 ## 控制)。
- 包含 其他文件(由指令 #include 以及使用 __has_include(自 C++17 起) 检查)。
- 导致错误 或 警告(自 C++23 起)(分别由指令 #error或 #warning 控制(自 C++23 起))。
预处理器的以下方面可以控制
- 实现定义 行为(由指令 #pragma 和运算符 _Pragma(自 C++11 起) 控制)。此外,一些编译器支持(在不同程度上)运算符 __pragma 作为非标准扩展。
- 文件名和行信息 可用于预处理器(由指令 #line 控制)。
[编辑] 缺陷报告
以下行为更改缺陷报告被追溯应用于以前发布的 C++ 标准。
DR | 应用于 | 已发布的行为 | 正确行为 |
---|---|---|---|
CWG 2001 | C++98 | 使用非标准定义指令的行为不清楚 | 被条件支持 |
[编辑] 参见
C++ 文档 关于 预定义宏符号
| |
C++ 文档 关于 宏符号索引
| |
C 文档 关于 预处理器
|