C语言编译器的编译运行过程

一、编译和链接的作用

在使用C语言编译器的时候,当我们写完一个.c文件并选择编译运行它的时候,文件经过了编译(生成.obj),链接(生成.exe,就是可执行文件)的过程,然后在一定的运行环境下运行得出结果。

二、编译的三步:预处理、编译、汇编

(假设写了一个名为test.c的文件)

2.1预处理

2.1.1预处理生成的文件

预处理后生成的文件名为test.i,文件中包括了许多前驱代码,在最后的代码中,我们可以看到经过处理后的文本文件代码。

2.1.2预处理所做的工作

①展开所用#include预处理指令

②删去所有#define,将内容替换到代码中

③保留#pragram的编译器指令,处理其他所有的条件编译指令,如#if,#endif,#ifdef,#elif,#else,#ifndef等等。

④删去所有注释

2.2编译

2.2.1编译后生成的文件

编译后生成的文件名为test.s,这是一个汇编文件,其中不再有我们所熟悉的代码,取而代之的是汇编指令

2.2.2编译过程所分三步

①词法分析:通过扫描器实现,把代码中的字符分割成一系列记号

②语法分析:通过语法分析器实现,分析以表达式为节点的语法树

③语义分析:通过语义分析器,进行对表达式语义层面的静态分析,包括声明,类型的匹配与转换等等;此外,该阶段也会报出错误的语法分析

2.3汇编

2.3.1汇编后生成的文件

汇编后生成的文件名为test.obj(Windows下,而在Linux操作系统下会生成test.o,两者都是目标文件)

2.3.2汇编过程所做的工作

使用汇编器,将汇编代码转换为机器可识别的二进制指令,但过程本身只是进行了一次对照编译,不做指令的优化

三、链接

3.1链接所解决的问题

链接是为了解决一个项目中多文件,多模块的相互调用问题

3.2链接过程所涉及到的文件与库

①当项目中有多个.c文件的时候,每个.c文件都单独经过编译器生成.obj目标文件,链接过程包括了全部的目标文件

②连接过程还有链接库的参与,该库包括了初始引用的各个库函数

四、运行环境的三个步骤

4.1程序必须载入内存中

①有操作系统交给操作系统来完成

②在一个独立环境中,程序的载入需要手动安排(比如单片机)

4.2开始执行程序

调用main函数,此时程序默认开始使用一个运行时的堆栈,,一个静态内存

4.3程序终止

①正常main函数的结束

②意外导致的程序终止

  • 13
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值