C语言下的 编译过程

基于Linux GCC 

C语言下的 编译过程

C语言下的 编译过程C语言下的 编译过程

C语言下的 编译过程

 

看起来是一步,其实是分四部分

1.三大预处理(预处理阶段)

1)文件包含 #include <stdio.h>

2)条件编译 #if

3)宏展开(宏替换)define maxSIZE 1000  (#define 标识符 字符串)

用GCC内置的CPP编译器对.c文件进行预处理

用头文件的内容代替#include <...>这个语句

 

C语言下的 编译过程C语言下的 编译过程

 

stdio.h文件也一样,所以预处理后的文件要比原来的大很多

 

C语言下的 编译过程

 

2.编译阶段

这也是工程量最大的一个阶段

把原来代码一一编译成汇编语言

C语言下的 编译过程

C语言下的 编译过程

 

3.汇编阶段

把汇编语言编译成处理器可以看懂并且解释的机器代码,生成二进制可重定向ELF格式文件,扩展名为.o 

C语言下的 编译过程

 

4.链接

因为一个程序有许多.c文件组成,还需要用到很多库,所以这个时候就要把各个库文件和.c文件编译出来的.o文件链接起来,形成可执行文件,.out为

 

C语言下的 编译过程

 

上面四个过程也可以用基于GUN编译工具链的其他工具完成,如果一键用GCC的话,GCC自动调用这些工具

cpp(预处理)

as(汇编)

ld(链接)