Preprocessor
      From cppreference.net
     
     
      
       <
       
        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 起) )。
以下预处理器的相关方面可以进行控制:
- 
        
         
          implementation defined
         
        
        behavior (controlled by directive
        #pragmaand operator_Pragma(since C99) )
- 
        
         
          file name and line information
         
        
        available to the preprocessor (controlled by directives
        #line)
脚注
- ↑ 这些是由标准定义的指令。标准未定义其他指令的行为:它们可能被忽略、具有某些实用含义,或导致程序格式错误。即使被忽略,它们也会在预处理器处理完成后从源代码中移除。 常见的非标准扩展是指令 #warning ,它在编译期间发出用户定义的消息。 (直至 C23)
示例
| 本节内容不完整 原因:缺少示例 | 
参考文献
- C23 标准 (ISO/IEC 9899:2024):
- 
         - 6.10 预处理指令 (页码: 待定)
 
- C17 标准 (ISO/IEC 9899:2018):
- 
         - 6.10 预处理指令 (p: 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++ 文档
           
          
          关于
          
           
            预处理器
           
          
          |