预处理器
来自 cppreference.com
< c
预处理器在 翻译阶段 4 执行,在编译之前。 预处理的结果是一个单一文件,然后传递给实际的编译器。
内容 |
[edit] 指令
预处理指令控制预处理器的行为。 每个指令占一行,并具有以下格式
-
#
字符 - 预处理指令(
define
、undef
、include
、if
、ifdef
、ifndef
、else
、elif
、elifdef
、elifndef
(since C23)、endif
、line
、embed
(since C23)、error
、warning
(since C23)、pragma
之一)[1] - 参数(取决于指令)
- 换行符
空指令(#
后跟换行符)是允许的,没有任何作用。
[edit] 功能
预处理器具有源文件翻译功能
- 条件 编译源文件的部分(由指令
#if
、#ifdef
、#ifndef
、#else
、#elif
、#elifdef
、#elifndef
(since C23) 和#endif
控制)。 - 替换 文本宏,同时可能连接或引用标识符(由指令
#define
和#undef
以及运算符#
和##
控制) - 包含 其他文件(由指令
#include
和使用 __has_include(since C23) 检查) - 导致 错误 或 警告(since C23)(由指令
#error
或#warning
分别控制(since C23))
预处理器的以下方面可以控制
[edit] 脚注
- ↑ 这些是标准定义的指令。 标准没有为其他指令定义行为:它们可能被忽略、具有某些有用的含义或使程序格式错误。 即使被忽略,它们在预处理器完成时也会从源代码中删除。 一个常见的非标准扩展是指令
#warning
,它在编译期间发出用户定义的消息。(until C23)
[edit] 参考资料
- 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 预处理指令
[edit] 另请参阅
C 文档 了解 预定义宏符号
| |
C 文档 了解 宏符号索引
| |
C++ 文档 了解 预处理器
|