预处理器
来自cppreference.com
< cpp
预处理器发生在编译之前,在翻译阶段四运行,其结果将作为一个单独的文件传送给真正的编译器进行编译。
目录 |
[编辑] 预处理指令
预处理指令控制预处理器的行为。每个指令占据一行并且具有如下的格式:
-
#
字符 - 预处理指令(
define
、undef
、include
、if
、ifdef
、ifndef
、else
、elif
、endif
、line
、error
、pragma
之一)[1] - 参数(取決于指令)
- 换行符
空指令(#
后跟一个换行符)是合法的,并且不产生任何具体效果。
[编辑] 预处理器的能力
预处理器具有一些对源文件进行翻译的能力:
- 有条件地编译源文件的若干部分(由指令
#if
、#ifdef
、#ifndef
、#else
、#elif
和#endif
予以控制)。 - 替换文本宏,并可以对标识符进行拼接或者加上引号(由指令
#define
和#undef
,预处理器运算符#
和##
予以控制) - 包含其他文件(由指令
#include
予以控制并可以通过__has_include
进行检查 (C++17 起)) - 引发错误(由指令
#error
予以控制)
预处理器的以下方面可以被控制:
[编辑] 脚注
- ↑ 这些是标准所定义的指令。标准并没有定义其它指令的行为,它们可能被忽略,可能具有有用的功能,也可能造成一个编译错误。无论如何,当预处理结束时,预处理指令会从源文件中移除。一个常见的非标准扩展是
#warning
,它造成在编译的过程中产生一条用户定义的消息。
[编辑] 另见
预处理器的 C 文档
|