命名空间
变体
操作

预处理器

来自 cppreference.cn
< c

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

目录

[编辑] 指令

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

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

空指令 (# 后跟换行符) 是允许的,并且没有效果。

[编辑] 功能

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

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

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

[编辑] 脚注

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

[编辑] 示例

[编辑] 参考文献

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

[编辑] 参见

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