命名空间
变体
操作

预处理器

来自 cppreference.cn
< c

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

目录

[编辑] 指令

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

  • # 字符
  • 预处理指令(define, undef, include, if, ifdef, ifndef, else, elif, elifdef, elifndef(C23 起), endif, line, embed(C23 起), error, warning(C23 起), pragma 之一)[1]
  • 参数(取决于指令)
  • 换行符。

允许空指令(# 后跟换行符),且无任何效果。

[编辑] 功能

预处理器具有以下源文件转换功能:

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

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

[编辑] 脚注

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

[编辑] 示例

[编辑] 参考

  • C23 标准 (ISO/IEC 9899:2024)
  • 6.10 预处理指令 (p: 待定)
  • 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 预处理指令

[编辑] 另请参阅

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