预处理阶段主要处理那些源?件中#开始的预编译指令。?如:#include,#define,规则如下:
?👺
?
将所有的
#define
删除,展开所有的宏定义。
?👺
?
处理所有的条件编译指令,如:
#if
、
#ifdef
、
#elif
、
#else
、
#endif
。
?👺
?
处理#include 预编译指令,将包含的头?件的内容插?到该预编译指令的位置。这个过程是递归进行的,被包含的头文件也可能包含其他?件。
?👺
??
删除所有的注释
?👺
?
添加行号和文件名标识,方便后续编译器?成调试信息等。
?👺
?
或保留所有的#pragma的编译器指令,编译器后续会使?。
经过预处理后的.i文件中不再包含宏定义,因为宏已经被展开。并且包含的头?件都被插?到.i?件
中。我们想知道宏定义或者头?件是否包含正确的时候,可以查看预处理后的.i?件来确认。