我使用了GCC -E
命令,我可以看到#include文件在预处理后被粘贴。但是当我使用GCC -S
命令时,在生成的汇编文件( .s )中,我无法找到有关我的头文件的信息。(更具体地说,我是否评论了#include指令,我得到相同的.s文件)。
下一步我可以使用gcc -o *.s
来汇编和链接我的 .s 文件。但 GCC 在哪里获取头文件信息?
答案 0 :(得分:1)
预处理输出中的#include
语句可以链接到头文件,以防编译器发现错误并希望通知用户错误的具体位置("包含在xxx中) .H&#34)
但#include
中包含的所有代码/声明(只要它们符合正确的#ifdef/#if
条件)都会在预处理输出中展开。编译器只使用此代码/声明内容来生成程序集/二进制对象文件,此时不再需要标题。
因此,您的汇编代码已经集成了头文件的信息(结构偏移,常量,类型大小......),它已不再是C,它的组装。