IDE的一键Build背后隐藏了什么

大家所熟悉的IDE(集成开发环境)有很多,比如Visual Studio ,Xcode等等。那么我们在Coding完代码后,一般都是点击build直接运行程序,直到输出结果。但是往往我们忽略了其中的过程,build之后IDE都执行了哪些操作呢?一个build其实是编译和连接两个合并在了一起,日常的这些IDE非常强大,都已经帮我们提供了默认的配置,我们只需要点击build即可。但是这样很多系统软件的运行机制被掩盖,有时程序莫名其妙的错误让我们无所适从,了解了内部机制对一些问题的解决还是会有帮助的。今天来简单介绍下大概都有哪些机制。

先来一段最简单的c函数代码:

#include<stdio.h>

void main ()

{

printf("Hello World");

}

上面的这条打印语句大家再熟悉不过,那么当我们运行程序直到结束都只做了一些什么事情呢?其实具体可以分为四个部分:预处理编译汇编连接

一 预编译

预编译过程主要处理源代码中的以“#”号开始的预编译指令,比如“#include.h”,"#define"等等。主要处理规则如下:

1.将所有的“#define”删除,并且展开所有的宏定义。

2.处理所有条件预编译指令,例如"#if","ifdef","#else"等。

3.处理"#include

"预编译指令,将被包含的文件插入到该预编译指令的未知,是递归进行的,嵌套执行。

4.删除所有的注释。

5.添加行号和文件名标识(这就是为什么档我们编译失败,遇到红色警告的时候为什么会直接定位到错误行号Xcode编译)

6.保留所有的#paragma编译器指令

二 编译

编译过程就是把预处理完的文件进行一系列的扫描语法分析语义分析源代码优化汇,代码生成编代码文件。这个过程是build的核心部分。介绍一下编译器,编译器就是将高级语言翻译成机器语言的一个工具没比如我们写Objective-C一个程序可以使用编译器将其翻译成机器可以执行的指令和数据,如果使用机器指令或汇编语言编写程序是是非费事的事情,会使程序开发效率很低下,经过编译过程之后我们的源程序就输出成目标文件(Object File)。

三 汇编

汇编器是将汇编代码转变成机器可以执行的指令每一个汇编语句几乎都对应一条机器指令,不需要复杂的语法和语,也没有语义,只是根据汇编指令和机器指令的对照表一一翻译就可以了。

四 连接

一个程序被分割成多个模块,因为当一个程序很复杂的时候,不得不将这个复杂的程序分为N个模块,我们把每个源代码模块独立编译,然后按照需要将它们再组装起来,这些模块之间最后如何形成一个单一的程序,这个模块的拼接过程就是连接。在下文会讲解连接器如何将这些编译后的模块连接到一起,产生最终的那个可以执行的程序。

先更新一部分,抽空接着往下写哈~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值