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语言的编译器工作原理 - 天天要闻

科技分类资讯推荐

麒麟9020A+鸿蒙5.0,华为曝光的新机,真刺激啊! - 天天要闻

麒麟9020A+鸿蒙5.0,华为曝光的新机,真刺激啊!

华为这段时间的动作真挺频繁的,连续发布了多款重磅级别的新品。比如采用新形态设计的华为PuraX,到系统和芯片全部自研的华为鸿蒙PC。而且,华为首款搭载HarmonyOS 5系统的直板手机也即将发布,这就是华为nova14系列。
大厂竞相押注的MCP是啥? - 天天要闻

大厂竞相押注的MCP是啥?

当地时间2025年2月27日,马来西亚吉隆坡,阿里巴巴集团云计算部门开发的Qwen AI大型语言模型(LLM)用户查询流程图在阿里云AI技术日活动上展示。视觉中国/图2025年春,AI世界再次开卷新概念。
获黄仁勋高调推荐的AI搜索引擎 最新估值冲击千亿关口 - 天天要闻

获黄仁勋高调推荐的AI搜索引擎 最新估值冲击千亿关口

财联社5月13日讯(编辑 史正丞)据当地媒体报道,美国AI搜索引擎公司Perplexity正接近完成新一轮融资谈判,使得公司估值升至近140亿美元(约合人民币1013亿元)。知情人士称,知名风投机构Accel将牵头本轮融资,预计总额达5亿美
苹果 macOS 15.5 正式发布 - 天天要闻

苹果 macOS 15.5 正式发布

IT之家 5 月 13 日消息,苹果今日向 Mac 电脑用户推送了 macOS 15.5 更新(内部版本号:24F74),本次更新距离上次发布正式版间隔 26 天。 需要注意的是,因苹果各区域节点服务器配置缓存问题,可能有些地方探测到升级更新的时间略有延迟,一般半小时内,不会太久。 本文由机器人发布,IT之家稍后将为大家带来具体更新内容...
106亿营收仅4亿利润:烧钱换流量,押注短视频能否拯救三只松鼠? - 天天要闻

106亿营收仅4亿利润:烧钱换流量,押注短视频能否拯救三只松鼠?

2025年4月25日,三只松鼠正式向港交所递交招股书,计划在香港主板实现“A+H”股双重上市。若此次上市成功,其将成为国内首个跨越沪深港两地的零食巨头。2024年财报显示,三只松鼠营收达106.22亿元,同比增长49.3%,净利润同比增长85.5%至4.08亿元。这一业绩使其稳居中国零食企业零售额第一,但亮眼数据背后,依赖线上渠道、...
权威认证护航出海征程!Intertek 为正泰电源液冷储能户外柜系列产品颁发 ETL、CB、CE等系列证书 - 天天要闻

权威认证护航出海征程!Intertek 为正泰电源液冷储能户外柜系列产品颁发 ETL、CB、CE等系列证书

近日,Intertek天祥集团(以下简称“Intertek”)为上海正泰电源系统有限公司(以下简称“正泰电源”)研发的CPS ESS-125kW/261kWh 液冷储能户外柜系列产品颁发了 ETL、CB、CE等系列证书,正式标志着该系列产品可顺利进入北美和欧洲市场。 颁证仪式在德国慕尼黑Intersolar展会现场正泰电源展台隆重举行, 正泰电源总经理李..
广州积极推动以科技为核心的“华夏社区”项目 - 天天要闻

广州积极推动以科技为核心的“华夏社区”项目

一、科技赋能社区,保障民生稳定 广州“华夏社区”项目以科技为核心,融合人工智能、大数据、物联网等前沿技术,构建智能化社区管理体系。通过智能安防、智慧医疗、便民服务等功能,提升居民生活质量,确保社区安全稳定。 例如,社区引入智能安防系统,实现全天候监控与预警;智慧医疗平台提供在线诊疗、健康监测等服务,方...
『败家变持家』让我Carry全场的神器,ROG绝神27Pro显示器评测 - 天天要闻

『败家变持家』让我Carry全场的神器,ROG绝神27Pro显示器评测

哈喽小伙伴们好,我是Stark-C~对于和我一样喜欢玩游戏的玩家来说,在选购显示器似乎都有这样的纠结:一方面,我们再玩《CSGO》或者《使命召唤》这类FPS 游戏时我们希望显示器不影响我们拔枪的速度,能有超高刷新率和低延迟,这样画面就会更加