命名空间
变体
操作

预处理器

来自 cppreference.com
< c

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

内容

[edit] 指令

预处理指令控制预处理器的行为。 每个指令占一行,并具有以下格式

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

空指令(# 后跟换行符)是允许的,没有任何作用。

[edit] 功能

预处理器具有源文件翻译功能

  • 条件 编译源文件的部分(由指令 #if#ifdef#ifndef#else#elif#elifdef#elifndef(since C23)#endif 控制)。
  • 替换 文本宏,同时可能连接或引用标识符(由指令 #define#undef 以及运算符 ### 控制)
  • 包含 其他文件(由指令 #include 和使用 __has_include(since C23) 检查)
  • 导致 错误 警告(since C23)(由指令 #error#warning 分别控制(since C23))

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

[edit] 脚注

  1. 这些是标准定义的指令。 标准没有为其他指令定义行为:它们可能被忽略、具有某些有用的含义或使程序格式错误。 即使被忽略,它们在预处理器完成时也会从源代码中删除。 一个常见的非标准扩展是指令 #warning,它在编译期间发出用户定义的消息。(until C23)

[edit] 参考资料

  • C17 标准 (ISO/IEC 9899:2018)
  • 6.10 预处理指令 (p: 117-129)
  • C11 标准 (ISO/IEC 9899:2011)
  • 6.10 预处理指令 (p: 160-178)
  • C99 标准 (ISO/IEC 9899:1999)
  • 6.10 预处理指令 (p: 145-162)
  • C89/C90 标准 (ISO/IEC 9899:1990)
  • 3.8 预处理指令

[edit] 另请参阅

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