预处理器
来自cppreference.com
                    
                                        
                    < cpp
                    
                                                            
                    预处理器在编译前的翻译阶段 4 执行。预处理的结果是单个文件,接下来它会被传递给实际编译器。
指令
预处理指令控制预处理器的行为。每个指令占据一行并拥有下列格式:
-  
#字符 -  预处理指令(
define、undef、include、if、ifdef、ifndef、else、elif、endif、line、error、pragma之一)[1] - 实参(取决于指令)
 - 换行符
 
允许空指令(即在 # 后直接换行),而它没有效果。
| 
 导入声明(  | 
(C++20 起) | 
预处理指令不得来自宏展开。
#define EMPTY EMPTY # include <file.h> // 不是预处理指令
能力
预处理器有能力翻译源文件:
-  有条件编译源文件的某些部分(由 
#if、#ifdef、#ifndef、#else、#elif和#endif指令控制)。 -  替换文本宏,同时可能对标识符进行拼接或加引号(由 
#define和#undef指令与#和##运算符控制)。 -  包含其他文件(由 
#include指令控制并以__has_include检查 (C++17 起))。 -  引发错误(由 
#error指令控制) 
能控制预处理器的下列方面:
脚注
- ↑ 这些指令是标准定义的。标准不定义其他指令的行为:它们可以被忽略、拥有一些有用的含义或导致编译时错误。即使忽略,也会在预处理器完成工作时将它们从源码中移除。一种常用的非标准扩展是 
#warning指令,它在编译期间放出一条用户定义的消息。