c语言——编译的过程

        一个test.c的文件是如何产生我们想要的效果呢,最终是怎样生成一个test.exe可执行文件呢?

        test.c放的是c语言的源代码,经过翻译环境会变成二进制文件再经过运行环境产生出我们想要的结果。

        那这个翻译环境是怎样翻译的呢?翻译环境分成2个过程:编译、链接。c语言的源代码经过编译会生成 .obj 的目标文件,而目标文件与链接库经过链接器则会生成一个.exe可执行程序。

        编译又可以细分成:预编译也叫(预处理)、编译、汇编。

        接下来用Linux下的gcc C语言编译器来演示程序的编译和链接的过程。

编译阶段:

        预编译:

                有2个文件:add.c 、test.c。经过预编译生成一个test.i的文件。

         打开test.i文件一看为什么代码量很少的两个文件经过预处理后生成一个.i 的文件会突然变出很多内容呢?800多行。

        不难发现,在test.c文件里有包stdio.h头文件,怎么到了.i 文件里就没了呢?其实是因为stdio.h头文件里面的内容被展开了,所以才导致了原本寥寥无几的内容突然剧增了。

        预处理阶段不单单是展开头文件,不仅会把注释替换成空格,相当于是删掉注释,因为注释是给人看的,编译器才不看注释;还会完成宏替换。

 编译

        编译阶段做了些什么呢?编译阶段会把c语言的源代码转换成汇编代码,并且会进行语法分析、词法分析、语义分析、符号汇总(文件里全局的函数符号进行符号汇总,把Add、main、printf等等一些函数符号名记录下来)。

 

 汇编

         到了汇编这个阶段会把汇编代码转换成二进制指令、形成符号表。

        形成符号表是什么意思呢,就是给编译阶段汇总出来的符号进行地址分配然后形成符号表。


 链接 

        链接阶段会进行合并段表、符号表的合并和重定位。最终生成可执行程序。

 总结

 

 

 

 

        

        

        

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值