预处理器

< c

预处理器于翻译阶段 4 执行,在编译之前。预处理的结果是将被传递给实际编译器的单个文件.

指令

预处理指令控制预处理器的行为。每个指令占据一行,且拥有下列格式:

  • # 字符
  • 预处理指令( defineundefincludeififdefifndefelseelifendiflineerrorpragma 之一)[1]
  • 实参(依赖于指令)
  • 换行符

允许空指令(跟随换行符的 # ),而它无效果。

能力

预处理器拥有源文件翻译能力:

  • 条件性编译源文件的部分(以指令 #if#ifdef#ifndef#else#elif#endif 控制)。
  • 替换文本宏,可以连接或加引标识符(以指令 #define#undef ,运算符 ### 控制)。
  • 包含其他文件(以指令 #include 控制)。
  • 导致错误(以指令 #error 控制)。

能控制预处理器的下列方面:

脚注

  1. 这些是标准定义的指令。标准不定义其他指令的行为:它们可能被忽略,或拥有有用的含义,或令程序为病式。即使在被忽略的情况下,在预处理器完成时也将它们从源代码移除。一个常见的非标准扩展是指令 #warning ,它在编译中发出用户定义的信息。

引用

  • C11 standard (ISO/IEC 9899:2011):
  • 6.10 Preprocessing directives (p: 160-178)
  • C99 standard (ISO/IEC 9899:1999):
  • 6.10 Preprocessing directives (p: 145-162)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 3.8 PREPROCESSING DIRECTIVES

参阅