C/C+编程笔记:C语言的编译器工作原理

2020年12月07日23:40:10 科技 1738

以gcc编译器为例子,编译实际上总共经历了四个阶段

预处理--->编译--->汇编--->链接

C/C+编程笔记:C语言的编译器工作原理 - 天天要闻

1.预处理阶段:编译器以cpp文件作为一个单元,首先读这个cpp文件,发现第一句与第二句包含一个头文件,就会在所有搜索路径中寻找这两个头文件,找到之后,就会到相应头文件中再去处理宏、变量、函数声明、嵌套的头文件等。

检测依赖关系,进行宏替换,看是否有重复定义与声明的情况发生,最后将那些文件中所有的东东全部扫描进这个当前的cpp文件中,形成一个中间"cpp文件"。

在这一步中相当于将那个头文件中的test变量扫描进了一个中间cpp文件,那么test变量就变成了这个文件中的一个全局变量。在stdio.h这个头文件中有一些函数的声明,这时也把这些函数的声明一股脑的扫描到了这个中间cpp文件中(只是扫描了函数的声明,并没有实现)。

C/C+编程笔记:C语言的编译器工作原理 - 天天要闻

2.编译阶段:此时就为这个中间cpp文件的所有变量、函数形参分配空间(原则上,在这里只能看到.h文件中函数、变量的声明,为变量和函数的形参等分配空间),将各个函数编译成二进制码,按照特定目标文件格式生成目标文件。

在这种格式的目标文件中进行各个全局变量、函数的符号描述(编译器维护一个符号描述表),将这些二进制码按照一定的标准组织成一个目标文件。

C/C+编程笔记:C语言的编译器工作原理 - 天天要闻

此时的每一个cpp文件都被编译器编译成了一个目标文件,同时每个目标文件都有一张符号表,这张符号表中记录了这个cpp文件都用到了哪些变量,哪些函数,函数的参数是什么类型的,有几个参数。

同时为变量和函数形参开辟了内存空间。所以这里编译器把你这个cpp用到的所有的东西都记录下来了,如果有重复定义或者没有定义的变量、函数等,编译器一下子就知道了。

3.连接阶段:将上一步成生的各个目标文件,根据一些参数,连接生成最终的可执行文件,主要的工作就是重定位各个目标文件的函数、变量等,相当于将个目标文件中的二进制码按一定的规范合到一个文件中。

C/C+编程笔记:C语言的编译器工作原理 - 天天要闻

科技分类资讯推荐

董宇辉兰知春序备案官网域名 - 天天要闻

董宇辉兰知春序备案官网域名

天眼查App显示,近日,兰知春序(西安)科技有限公司新增一则网站备案信息,域名为“lanzhicx.com”,审核日期为6月23日。目前,该网站暂时无法打开。
墙板安装、地砖铺贴……首届粤港澳建筑机器人大赛好燃 - 天天要闻

墙板安装、地砖铺贴……首届粤港澳建筑机器人大赛好燃

7月8日,首届粤港澳建筑机器人大赛在华南理工大学(广州国际校区)举办。据悉,本次大赛由广东省住屋和城乡建设厅、香港特别行政区政府发展局联合指导,粤港澳智能建造产业发展联盟与香港建造业议会主办,中建三局深圳公司等企业联合承办。
多个账号仿冒“K1373砸窗小伙” 平台:新增拦截仿冒策略 - 天天要闻

多个账号仿冒“K1373砸窗小伙” 平台:新增拦截仿冒策略

7月9日上午,红星新闻记者浏览发现,自官方通报“男子在列车上砸车窗通风”事件后,社交平台上涌现出多个以“K1373砸窗小伙”“砸车窗小伙”等命名的网络账号。其中,有一名为“砸玻璃的小伙子”的用户更是在抖音发布视频作品,表示自己就是那个砸玻璃的男人。 ▲社交平台上出现多个相关的账号记者查看这些账号,发现其中大...
撕掉伪创新!岚图CEO卢放:我们只做能扛5万次颠簸的“低调技术” - 天天要闻

撕掉伪创新!岚图CEO卢放:我们只做能扛5万次颠簸的“低调技术”

7月9日,岚图FREE+以一场史无前例的“暴力开箱”直播震撼行业:在-30℃极寒冰封、500公斤重压、超国标500%强度的5万次颠簸震动后,其空气悬架系统不仅毫发无损,连门把手、电吸门等细节功能均全程零异常,相当于在极寒的漠河超满载连跑5年颠簸路后,岚图FREE+空悬品质依然稳定可靠。这场对“百万级豪车底盘”的地狱式拷问,...
筑牢网络安全屏障——七台河市成功举办2025年度网络安全培训与网络安全应急演练 - 天天要闻

筑牢网络安全屏障——七台河市成功举办2025年度网络安全培训与网络安全应急演练

七台河市成功举办2025年度网络安全培训与网络安全应急演练筑牢网络安全屏障7月9日,七台河市委网信办联合市公安局、市营商环境局组织开展2025年七台河市网络安全培训及网络安全应急演练。此次网络安全培训、应急演练活动旨在扎实备战年度网络安全工作,全面提升全市网络安全突发事件的应急处置能力。各县(区)委网信办、市...