当我们完成一个c文件后,我们就可以进行编译-链接-执行。那么它们究竟是怎么工作的呢,接下来就给大家介绍整个编译过程(如图所示)!下面就来介绍下在每个过程中,各个模块的作用!
(1)预处理器:处理注释,用空格表示;删掉#define,展开有用的宏定义;处理条件编译指令如#ifdef,#endif,#else等;处理include文件,展开里面内容;保留#pragma指令。
在linux下,通过gcc-E文件名.c-O文件名.i命令可以得到预处理后的文件。
(2)编译:这个过程就是将.i文件编译生成汇编文件,即.s文件,这个过程编译器主要是在判断语法是否正确,然后再来生成汇编文件。
在linux下,通过gcc-S文件名.c-O文件名.s命令即可生成编译后的文件。
(3)汇编:在第二步生成的.s文件通过汇编器可以生成目标文件(file.o),即机器码。
(4)链接:这个过程就是将各个模块联系在一起,可分为动态链接(在程序被同时打开多次时,相同的库文件只占用一个内存)和静态链接(库文件占用多个内存,比较占用内存)。
(5)通过上面一系列的处理就可以得到可执行的文件,即file.out了。