预处理器
来自 cppreference.cn
< c
预处理器在翻译阶段 4,在编译之前执行。预处理的结果是一个单独的文件,然后传递给实际的编译器。
目录 |
[编辑] 指令
预处理指令控制预处理器的行为。每个指令占一行,并具有以下格式
-
#
字符 - 预处理指令 (
define
,undef
,include
,if
,ifdef
,ifndef
,else
,elif
,elifdef
,elifndef
(since C23),endif
,line
,embed
(since C23),error
,warning
(since C23),pragma
) [1] - 参数 (取决于指令)
- 换行符。
空指令 (#
后跟换行符) 是允许的,并且没有效果。
[编辑] 功能
预处理器具有源文件翻译功能
- 有条件地 编译源文件的部分内容 (由指令
#if
,#ifdef
,#ifndef
,#else
,#elif
,#elifdef
,#elifndef
(since C23) 和#endif
控制)。 - 替换 文本宏,同时可能连接或引用标识符 (由指令
#define
和#undef
,以及运算符#
和##
控制) - 包含 其他文件 (由指令
#include
并通过__has_include
检查(since C23) 控制) - 导致 错误 或 警告(since C23) (由指令
#error
或#warning
分别(since C23) 控制)
可以控制预处理器的以下方面
[编辑] 脚注
- ↑ 这些是标准定义的指令。标准未定义其他指令的行为:它们可能被忽略,具有一些有用的含义,或使程序格式错误。即使被忽略,当预处理器完成时,它们也会从源代码中删除。一个常见的非标准扩展是指令 #warning,它在编译期间发出用户定义的消息。(until C23)
[编辑] 示例
本节不完整 原因:没有示例 |
[编辑] 参考文献
- C23 标准 (ISO/IEC 9899:2024)
- 6.10 预处理指令 (页码:待定)
- C17 标准 (ISO/IEC 9899:2018)
- 6.10 预处理指令 (页码:117-129)
- C11 标准 (ISO/IEC 9899:2011)
- 6.10 预处理指令 (页码:160-178)
- C99 标准 (ISO/IEC 9899:1999)
- 6.10 预处理指令 (页码:145-162)
- C89/C90 标准 (ISO/IEC 9899:1990)
- 3.8 预处理指令
[编辑] 参见
C 文档 关于 预定义宏符号
| |
C 文档 关于 宏符号索引
| |
C++ 文档 关于 预处理器
|