C语言-程序环境与预处理

本文详细介绍了C语言程序从源代码到可执行文件的全过程,包括预处理、编译、汇编和链接四个阶段。预处理涉及头文件处理、宏定义替换、注释删除等;编译阶段将C代码转化为汇编代码;汇编阶段将汇编代码转为机器指令;链接阶段整合目标文件和库文件,生成可执行文件。文章还讨论了不同编译器、链接器、IDE的差异,以及运行环境和预定义符号的作用。
摘要由CSDN通过智能技术生成

本文主要对源代码经编译链接形成结果的过程中各时段处理的指令与形成结果进行解析。

程序的编译环境与执行环境

在ANSIC的任何一种实现中存在两种不同的环境

第一种是编译环境,在此环境中源代码被转换为可执行的机器指令(二进制码)

第二种是执行环境,在此环境中执行机器指令

程序员编写的代码程序是源程序,通过编译环境(编译器),源程序会转化成可执行文件(二进制的机器指令),机器通过运行环境(操作系统)来运行指令,最后得到程序员想要的结果。

在一个较大的项目中多个源文件各自通过编译器编译成为多个目标文件(后缀obj)并在链接器中加上链接库的作用生成可执行文件。

链接库指的是库函数所在的库文件或者是第三方的库文件。

VS,DEV等等是集成开发环境(英文名ide),集成开发环境有编辑,编译,链接与调试等功能。

VS环境的编译器为文件cl.exe,链接器为文件link.exe,这两个文件都能在安装包中找到。

不同环境的编译器与链接器名一般不同。

源文件需要经过编译与链接两个大过程才能运行,而编译又分为预编译,编译与汇编三个小过程,链接只有一个链接的过程。

在预编译环节进行的事项:

1.处理包含的头文件,此时被包含的头文件的代码会被拷贝一份并送入某程序包含此头文件的位置。

2.#define定义的符号的替换,#define使用的本质就是算式替换,次替换在预编译环节完成,此时也有其他的预处理指令被处理

3.对代码中注释掉的内容(不必要的内容)进行删除,提高效率。

上述处理又叫文本操作,文本操作过后会将.c文件转化为.i文件。

在编译环节进行的事项:

把C语言的代码翻译成为汇编代码(二进制代码),并进行语法分析,词法分析,语义分析与符号汇总。

其中符号汇总为把文件中的全局符号(如函数符号main,printf等)汇总统计起来,注意:被汇总统计的符号一般都是全局符号,局部的符号因为声明周期较短而不被统计。

最后将.i文件转化为.s文件

在汇编环节进行的事项:

把汇编语言中的指令变为二进制指令,并根据编译环节中统计的所有符号制作一个符号表。

最后将.s文件转化为.o文件(此时使用的是linux环境,.o文件相当于windows环境的obj文件,也就是目标文件)。

在链接环境进行的事项:

1.合成段表,2.符号表的合并与重定位。3.链接多个.o(.obj)目标文件生成exe文件(可执行文件)

符号表的合并:多个.o文件(多个符号表)中可能有相同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值