C语言:程序编译和链接

        当我们在编译器上写好C代码,提交并运行后,屏幕上将会出现运行结果,在运行过程中,编译器完成了编译和链接(翻译环境),接着完成了代码的执行(执行环境)。接下来,让我们笼统的来聊一聊翻译环境以及翻译环境中的编译和链接。

一、翻译环境

在翻译环境中,源代码经过编译和链接,被转换为可执行的机器指令(即二进制指令)。而编译,又被分为预处理(预编译)、编译、汇编三个过程。

PS:一个C语言程序当中可能会有多个.c文件,每个.c文件都会单独经过编译器处理生成对应的目标文件(.obj文件)。

接着,多个⽬标⽂件和链接库⼀起经过链接器处理⽣成最终的可执⾏程序。

1.编译

1.1预处理

在预处理阶段,主要处理以#开头的一些预编译指令,并且经过预处理,源文件(.c)和头文件(.h)会被处理成以.i 为后缀的的文件。主要处理如下:


(1)#define将被删除,并且宏定义将被替换成所代表的数据

(2)所有注释将被删除

(3)将#include包含的头文件内容导入到该指令所在位置

(4)添加⾏号和⽂件名标识,⽅便后续编译器⽣成调试信息等

(5)保留所有的#pragma的编译器指令,编译器后续会使⽤

1.2编译

在汇编阶段,会对预处理的的文件进行一系列操作,如:词法分析、语法分析、语义分析及优化,并生成汇编代码 。

词法分析:即将语句中的字符分割成记号,例如:a+b=6; 这条语句中a被视为标识符,+被视为加号,b被视为标识符,=被视为赋值,6被视为数字。

语法分析:对词法分析产⽣的记号进⾏语法分析,从⽽产⽣语法树

例如a+b=6,生成语法树如图:

语义分析:即对表达式的语法层⾯分析。编译器所能做的分析是语义的静态分析。静态语义分析通常包括声明和类型的匹配,类型的转换等。这个阶段会报告错误的语法信息

1.3汇编

将汇编代码转变为机器指令(二进制指令),每一条汇编代码都几乎对应一条机器指令。

2.链接

链接的过程是非常复杂的,候需要把⼀堆⽂件链接在⼀起才⽣成可执⾏程序。

二、运行环境

如果大家对运行环境感兴趣可以参考下图:

以上便是翻译环境以及编译链接的全部内容。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值