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