Preprocessor
From cppreference.net
<
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 起) )。
以下预处理器的相关方面可以进行控制:
-
implementation defined
behavior (controlled by directive
#pragmaand operator_Pragma(since C99) ) -
file name and line information
available to the preprocessor (controlled by directives
#line)
脚注
- ↑ 这些是由标准定义的指令。标准未定义其他指令的行为:它们可能被忽略、具有某些实用含义,或导致程序格式错误。即使被忽略,它们也会在预处理器处理完成后从源代码中移除。 常见的非标准扩展是指令 #warning ,它在编译期间发出用户定义的消息。 (直至 C23)
示例
|
本节内容不完整
原因:缺少示例 |
参考文献
- C23 标准 (ISO/IEC 9899:2024):
-
- 6.10 预处理指令 (页码: 待定)
- C17 标准 (ISO/IEC 9899:2018):
-
- 6.10 预处理指令 (p: 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++ 文档
关于
预处理器
|