栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c语言——编译的过程

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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等等一些函数符号名记录下来)。

 

 汇编

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

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


 链接 

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

 总结

 

 

 

 

        

        

        

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/966385.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号