预处理器

来自cppreference.com
< c


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

目录

[编辑]指令

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

  • # 字符
  • 预处理指令(defineundefincludeififdefifndefelseelifelifdefelifndef(C23 起)endiflineembed(C23 起)errorwarning(C23 起)pragma 之一)[1]
  • 实参(取决于指令)
  • 换行符

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

[编辑]能力

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

  • 有条件编译源文件的某些部分(由 #if#ifdef#ifndef#else#elifelifdefelifndef(C23 起)#endif 指令控制)。
  • 替换文本宏,可以连接或加引标识符(以指令 #define#undef,运算符 ### 控制)。
  • 包含其他文件(以指令 #include 控制并以 __has_include 检查(C23 起))。
  • 导致错误警告(C23 起)(以指令 #error#warning(C23 起) 控制)。

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

[编辑]脚注

  1. 这些指令是标准定义的。标准不定义其他指令的行为:它们可以被忽略、拥有一些有用的含义或导致编译时错误。即使忽略,也会在预处理器完成工作时将它们从源码中移除。一种常用的非标准扩展是 #warning 指令,它在编译期间发出用户定义的消息。(C23 前)

[编辑]示例

[编辑]引用

  • C23 标准(ISO/IEC 9899:2024):
  • 6.10 Preprocessing directives (第 TBD 页)
  • C17 标准(ISO/IEC 9899:2018):
  • 6.10 Preprocessing directives (第 117-129 页)
  • C11 标准(ISO/IEC 9899:2011):
  • 6.10 Preprocessing directives (第 160-178 页)
  • C99 标准(ISO/IEC 9899:1999):
  • 6.10 Preprocessing directives (第 145-162 页)
  • C89/C90 标准(ISO/IEC 9899:1990):
  • 3.8 Preprocessing directives

[编辑]参阅

预定义宏符号C 文档
宏符号索引C 文档
预处理器C++ 文档
close