我知道这是一个非常基本的问题,但是当我使用gcc/g ++编译我的c/c ++代码时,在汇编器发挥作用以生成机器代码之前,中间输出的确切类型是什么?它是否像X86指令?
Ker*_* SB 12
GCC的处理链如下:
你的源代码
预处理源代码(扩展宏和包含,剥离注释)(-E,.ii)
编译成汇编(-S,.s)
汇编为二进制(-c,.o)
链接到可执行文件
在每个阶段,我都列出了使进程停止的相关编译器标志,以及相应的文件后缀.
如果使用编译-flto,则目标文件将使用GIMPLE字节码进行修饰,这是一种低级中间格式,其目的是将实际的最终编译延迟到链接阶段,从而允许进行链接时优化.
适当的"编译"阶段是实际的重型提升部分.预处理器本质上是一个独立的独立工具(虽然它的行为是由C和C++标准规定的),汇编器和链接器是实际上独立的独立工具,它们基本上分别只实现了硬件的二进制指令格式和操作系统的可加载可执行格式.