预处理器
预处理器发生在编译之前,在翻译阶段四运行,其结果将作为一个单独的文件传送给真正的编译器进行编译。
预处理指令
预处理指令控制预处理器的行为。每个指令占据一行并且具有如下的格式:
-
#
字符
- 预处理指令(
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
予以控制)
预处理器的以下方面可以被控制:
- 由实现定义的行为(由指令
#pragma
和 _Pragma
(C++11 起) 运算符予以控制)
- 预处理器所知的文件名和行号信息(由指令
#line
予以控制)
脚注
- ↑ 这些是标准所定义的指令。标准并没有定义其它指令的行为,它们可能被忽略,可能具有有用的功能,也可能造成一个编译错误。无论如何,当预处理结束时,预处理指令会从源文件中移除。一个常见的非标准扩展是
#warning
,它造成在编译的过程中产生一条用户定义的消息。
另见
版本历史
(当前 | 先前) 2017年2月3日 (五) 19:59 Lynnboy(讨论 | 贡献) 小 . . (2,543字节) (-1) . . (撤销)
(当前 | 先前) 2017年1月23日 (一) 20:01 Lynnboy(讨论 | 贡献) 小 . . (2,544字节) (+1) . . (撤销)
(当前 | 先前) 2017年1月23日 (一) 20:01 Lynnboy(讨论 | 贡献) . . (2,543字节) (+149) . . (撤销)
(当前 | 先前) 2016年2月1日 (一) 00:54 Wizardforcel(讨论 | 贡献) . . (2,394字节) (-2) . . (撤销)
(当前 | 先前) 2016年1月8日 (五) 08:11 Fefe(讨论 | 贡献) . . (2,396字节) (+214) . . (撤销)
(当前 | 先前) 2015年9月4日 (五) 20:11 Huoyao(讨论 | 贡献) . . (2,182字节) (0) . . (撤销)
(当前 | 先前) 2015年9月4日 (五) 20:10 Huoyao(讨论 | 贡献) . . (2,182字节) (0) . . (撤销)
(当前 | 先前) 2015年6月26日 (五) 08:59 Zy-li14(讨论 | 贡献) . . (2,182字节) (-3) . . (撤销)
(当前 | 先前) 2015年6月26日 (五) 08:54 Zy-li14(讨论 | 贡献) . . (2,185字节) (+3) . . (撤销)
(当前 | 先前) 2015年6月26日 (五) 08:50 Zy-li14(讨论 | 贡献) . . (2,182字节) (0) . . (撤销)
(当前 | 先前) 2014年8月21日 (四) 06:47 111.249.0.175(讨论) . . (2,182字节) (+21) . . (撤销)
(当前 | 先前) 2014年7月21日 (一) 07:29 D41D8CD98F(讨论 | 贡献) . . (2,161字节) (+22) . . (撤销)
(当前 | 先前) 2014年6月27日 (五) 21:09 D41D8CD98F(讨论 | 贡献) 小 . . (2,139字节) (-30) . . (撤销)
(当前 | 先前) 2013年9月21日 (六) 10:19 Psi(讨论 | 贡献) . . (2,169字节) (+87) . . (撤销)
(当前 | 先前) 2013年8月1日 (四) 08:46 P12bot(讨论 | 贡献) 小 . . (2,082字节) (+25) . . (撤销)
(当前 | 先前) 2013年7月29日 (一) 10:31 P12(讨论 | 贡献) . . (2,057字节) (-12) . . (撤销)
(当前 | 先前) 2013年7月25日 (四) 19:44 Chengluyu(讨论 | 贡献) 小 . . (2,069字节) (-9) . . (撤销)
(当前 | 先前) 2013年1月5日 (六) 06:18 Magiclogy(讨论 | 贡献) . . (2,078字节) (-330) . . (撤销)
(当前 | 先前) 2013年1月5日 (六) 06:14 Magiclogy(讨论 | 贡献) . . (2,408字节) (+28) . . (撤销)
(当前 | 先前) 2013年1月5日 (六) 06:13 Magiclogy(讨论 | 贡献) . . (2,380字节) (-311) . . (撤销)
(当前 | 先前) 2012年11月2日 (五) 14:10 P12bot(讨论 | 贡献) 小 . . (2,691字节) (0) . . (撤销)
(当前 | 先前) 2012年10月31日 (三) 01:25 Zhykzhykzhyk(讨论 | 贡献) 小 . . (2,691字节) (0) . . (撤销)
(当前 | 先前) 2012年10月31日 (三) 01:25 Zhykzhykzhyk(讨论 | 贡献) . . (2,691字节) (-228) . . (撤销)
(当前 | 先前) 2012年10月31日 (三) 01:03 Zhykzhykzhyk(讨论 | 贡献) . . (2,919字节) (-684) . . (撤销)
(当前 | 先前) 2012年10月27日 (六) 10:05 P12(讨论 | 贡献) 小 . . (3,603字节) (0) . . (撤销)
(当前 | 先前) 2012年10月26日 (五) 07:00 TranslationBot(讨论 | 贡献) . . (3,603字节) (-144) . . (撤销)
(当前 | 先前) 2012年10月25日 (四) 16:32 P12(讨论 | 贡献) 小 . . (3,747字节) (0) . . (撤销)
(当前 | 先前) 2012年10月25日 (四) 13:00 TranslationBot(讨论 | 贡献) . . (3,747字节) (+2,560) . . (撤销)
(当前 | 先前) 2012年5月4日 (五) 17:16 P12bot(讨论 | 贡献) 小 . . (1,187字节) (+289) . . (撤销)
(当前 | 先前) 2012年5月1日 (二) 04:37 P12(讨论 | 贡献) 小 . . (898字节) (0) . . (撤销)
(当前 | 先前) 2012年5月1日 (二) 04:37 P12(讨论 | 贡献) . . (898字节) (+898) . .