预处理器

来自cppreference.com
< cpp
 
 
C++ 语言
表达式
替代表示
字面量
布尔 - 整数 - 浮点
字符 - 字符串 - nullptr (C++11)
用户定义 (C++11)
工具设施
特性 (C++11)
类型
typedef 声明
类型别名声明 (C++11)
强制转换
隐式类型转换 - 显式类型转换
static_cast - dynamic_cast
const_cast - reinterpret_cast
内存分配
类特有的函数属性
特殊成员函数
模板
杂项
 
 

预处理器发生在编译之前,在翻译阶段四运行,其结果将作为一个单独的文件传送给真正的编译器进行编译。

目录

[编辑] 预处理指令

预处理指令控制预处理器的行为。每个指令占据一行并且具有如下的格式:

  • # 字符
  • 预处理指令(defineundefincludeififdefifndefelseelifendiflineerrorpragma 之一)[1]
  • 参数(取決于指令)
  • 换行符

空指令(#后跟一个换行符)是合法的,并且不产生任何具体效果。

[编辑] 预处理器的能力

预处理器具有一些对源文件进行翻译的能力:

  • 有条件地编译源文件的若干部分(由指令 #if#ifdef#ifndef#else#elif#endif 予以控制)。
  • 替换文本宏,并可以对标识符进行拼接或者加上引号(由指令 #define#undef,预处理器运算符 ### 予以控制)
  • 包含其他文件(由指令 #include 予以控制并可以通过 __has_include 进行检查 (C++17 起)
  • 引发错误(由指令 #error 予以控制)

预处理器的以下方面可以被控制:

[编辑] 脚注

  1. 这些是标准所定义的指令。标准并没有定义其它指令的行为,它们可能被忽略,可能具有有用的功能,也可能造成一个编译错误。无论如何,当预处理结束时,预处理指令会从源文件中移除。一个常见的非标准扩展是#warning,它造成在编译的过程中产生一条用户定义的消息。

[编辑] 另见

预处理器C 文档