前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++系列:编译器是如何工作的

C++系列:编译器是如何工作的

作者头像
小Bob来啦
发布2021-04-14 11:19:25
1.2K0
发布2021-04-14 11:19:25
举报
文章被收录于专栏:用户8057608的专栏
我认为,如果你做了一件事情,事情变得相当不错,那么你应该去做其他的事情,而不是长时间的停滞不前。只要弄清楚下一步是什么。——乔布斯

大家好啊,我是小Bob,本月将继续更新啦~

我们知道,我们写的代码一般都会经过以下处理阶段:

源代码→ 预处理器→ 编译器→ 汇编程序→ 目标代码→ 链接器→ 可执行文件,最后打包好的文件就可以给电脑去判读运行了。

由于最近都是在和C++打交道,所以今天和大家讨论讨论编译器在C++内部是如何工作的。

1.何为编译器?

编译器是一种计算机程序,它会将某种编程语言写成的源代码(原始语言)转换成另一种编程语言(目标语言)。

它主要的目的是将便于人编写、阅读、维护的高级计算机语言所写作的源代码程序,翻译为计算机能解读、运行的低阶机器语言的程序,也就是可执行文件。编译器将原始程序(source program)作为输入,翻译产生使用目标语言(target language)的等价程序。源代码一般为高级语言(High-level language),如Pascal、C、C++、C# 、Java等,而目标语言则是汇编语言或目标机器的目标代码(Object code),有时也称作机器代码(Machine code)。——来源于维基百科

2.内部实现

我们在写C++代码时,是将c++代码写成文本形式保存在一个后缀名为cpp的文件中。那么计算机是如何识别这些代码的呢?

在将代码文本变成计算机能够识别的过程中,包含了两个过程,一个是编译,另一个是链接。

在编译的过程中,我们还需要知道一个名词,那就是编译器。

编译器的作用很简单,就是将我们的代码文件转换成另一种形式,一种更接近于目标文件的中间形式。转换成的中间形式被保存在后缀名为obj(在Windows中是.obj文件,在Linux中是.o文件)的文件中。

3.编译器做了啥?

另一个问题来了,在转换成后缀名为obj的文件过程中,编译器到底做了啥?

首先,编译器需要预处理我们的代码,即所有的预处理语句都会被先处理。当然,在预处理过程中,或多或少的都会进行记号化和解析,将代码整理成编译器能够真正理解和推理的格式。

还需记住的是,在编译Cpp文件中,文件或许不是那么重要,编译器只会将一个cpp文件看成一个翻译单元,有许多个cpp文件就会被看成有许多个翻译单元;当然,还有一种情况是一个很大的cpp文件包含了很多小的cpp文件,那么这时编译器会将这个很大的cpp文件看成一个翻译单元。

C++系列...

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员Bob 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档