C 编译文件(汇编文件)中的头文件信息在哪里?

C 编译文件(汇编文件)中的头文件信息在哪里?,c,C,我使用了GCC-E命令,可以看到在预处理后粘贴了include文件。但是当我使用GCC-S命令时,在生成的汇编文件.S中,我找不到有关头文件的信息。更具体地说,无论我对include指令进行注释,我都会得到相同的.S文件。 下一步我可以使用gcc-o*.s来组装和链接我的.s文件。但是GCC从何处获得头文件信息?预处理输出中的include语句将链接到头文件,以防编译器发现错误并希望通知用户xxx.h中包含的错误的具体位置 但是包含在include中的所有代码/声明,只要它们与适当的ifdef/

我使用了GCC-E命令,可以看到在预处理后粘贴了include文件。但是当我使用GCC-S命令时,在生成的汇编文件.S中,我找不到有关头文件的信息。更具体地说,无论我对include指令进行注释,我都会得到相同的.S文件。 下一步我可以使用gcc-o*.s来组装和链接我的.s文件。但是GCC从何处获得头文件信息?

预处理输出中的include语句将链接到头文件,以防编译器发现错误并希望通知用户xxx.h中包含的错误的具体位置

但是包含在include中的所有代码/声明,只要它们与适当的ifdef/if条件匹配,就会在预处理的输出中展开。编译器只使用这些代码/声明来生成程序集/二进制对象文件,此时不再需要头文件


因此,您的汇编代码已经集成了头文件结构偏移量、常量、类型大小等信息。。。它不再是C,而是汇编。

头文件中有哪些信息对最终编译的可执行文件很重要?预处理的源文件尚未编译。在我的理解中,如果可执行文件使用动态lib.dll,它还需要一个.h文件来获取信息,例如函数的声明。因此,exe不需要包含.h,而是需要指定它使用的.h。这就是我认为include*.h指令的目的。所以我想知道汇编文件中的include*.h信息在哪里。无论如何,如果头文件信息丢失,为什么我们需要在源文件中写入include指令?@Jean-Françoisfare why。。。那么丢失的信息到哪里去了?请看我上面的评论also@nebulaf91通常头文件只包含声明,例如某个函数存在的声明、其返回类型及其参数。或者声明一个结构,这样您的代码就可以使用该结构。如果代码随后使用/调用该头文件中声明的函数,编译器可以检查语法是否正确。该头文件中通常没有要放入exe文件的内容。如果调用函数,编译器/链接器只需将其转换为一个内存地址,并将其写入exe文件。