C++头文件的预处理何时发生?

C++头文件的预处理何时发生?,c++,header,c-preprocessor,C++,Header,C Preprocessor,所以我有一个头文件,它创建了一个结构,看起来像这样 CreateStruct.h #define CREATE_STRUCT(NAME, VAR) \ struct NAME {\ DECLARE_VAR(VAR)\ };\ #define DECLARE_VAR\ //.... main.cpp #include "CreateStruct.h" //.... 这可以很好地编译并正确创建结构 我唯一好奇的是,这一过程

所以我有一个头文件,它创建了一个结构,看起来像这样

CreateStruct.h

#define CREATE_STRUCT(NAME, VAR) \
        struct NAME {\
            DECLARE_VAR(VAR)\
        };\

#define DECLARE_VAR\
        //....
main.cpp

#include "CreateStruct.h"
//....
这可以很好地编译并正确创建结构

我唯一好奇的是,这一过程到底是什么时候发生的

编译完成main.cpp后是否会发生这种情况


或者,当编译器看到include CreateStruct.h行时,它会立即发生吗?

预处理是第一步,它发生在编译之前。所有宏都被扩展,头文件被它们的内容替换,发生这种情况后,程序被编译

您可以使用选项-E查看预处理器的输出

gcc -E main.cpp

名称预处理器中的前缀pre应该给您一个提示。哦,请检查。如果您想了解技术,宏将在翻译的第四阶段展开,因此除了几乎是第一个可见的步骤外,在这之前还会发生一些事情。@chris如果宏在第四阶段展开,为什么会用gcc-E显示它们?@Mansuro第1阶段到第6阶段都是预处理阶段,因为第7阶段到第9阶段是编译和链接阶段。-E选项提供阶段4之后的输出。