(1)预处理阶段(.c ----> .i)
预处理器会处理所有的以#开头的命令,这些都属于预处理命令,也就是会将所有的头文件包含的东西插入到源文件中,将所有定义的宏都在程序中展开。还有一点是会处理注释部分,用空格来代替注释。
(2)编译阶段(.i ----> .s)
编译器会对预处理过后的代码进行一个语法的分析和检查,符合规则地程序就会被转化成汇编代码。
这一步有两处我要说的,其一,如果程序有错误,在编译阶段就会报错
其二,也可能只是我个人原因,我老是会将此阶段和下一个汇编阶段弄混,注意此处虽是生成汇编代码,但却不是汇编阶段
(3)汇编阶段(.s ----> .o)
汇编器会将上一步所生成的汇编代码翻译成计算机所能识别的机器码,并生成标文件
(4)链接阶段 (.o ----> 可执行文件)
链接器会将所有所用到的目标文件链接到一起,最终形成一个可执行文件
最后我还想说两句,可能很多人也知道
关于头文件#include<>与#include" "
#include<>直接从编译器指定的路径去搜索
#include" "先在程序当前指定的路径去搜索,然后再去编译器指定的路径去搜索
所以,一般如果自已定义头文件,则需要用#include" ",需自己指定搜索路径。还有回想一下自己在使用编译器自带的库时,是否也写过#include"stdio.h"这种类似的,当然,这不会报错,但实际上是多做了一次无用功。