从gcc探究C语言的编译过程

来源:互联网 发布:软件运营部门 编辑:程序博客网 时间:2024/05/14 10:46

我们都知道,C语言编译的四个步骤:

①预处理 ②编译 ③汇编 ④链接

具体是什么意思呢?我们分开编译就会得到结果


这是一个完整的编译过程,其中test.c和mytest.h是源文件,test.i 是经过预处理之后的代码.

①预处理:预处理包括了宏定义展开、头文件展开、条件编译、删除注释等等,在预处理期不进行语法检查

②编译:检查语法、将预处理之后的文件变成汇编代码

③汇编:将汇编文件转换为二进制代码

④链接:仅仅转换为二进制文件不能运行,就像基因上的启动子和终止子一样,需要链接启动文件等等然后才可以执行

tset.i的内容:

之前是include头文件展开的内容,下面是mytest.h的头文件的展开

static int a = 10;# 3 "test.c" 2void main(void){   printf("helloworld\n");}
下面是test.s的汇编代码

.file"test.c".data.align 4.typea, @object.sizea, 4a:.long10.section.rodata.LC0:.string"helloworld".text.globlmain.typemain, @functionmain:.LFB0:.cfi_startprocpushq%rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16movq%rsp, %rbp.cfi_def_cfa_register 6leaq.LC0(%rip), %rdicallputs@PLTnoppopq%rbp.cfi_def_cfa 7, 8ret.cfi_endproc.LFE0:.sizemain, .-main.ident"GCC: (Debian 6.4.0-2) 6.4.0 20170724".section.note.GNU-stack,"",@progbits
test.o 和 test.out都是二进制文件了,这就是gcc编译的全过程.希望能天天进步一点点偷笑偷笑



原创粉丝点击