预处理器
来自 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++ 文档 中的 预处理器
|