当前位置:网站首页>C语言程序的环境,编译+链接
C语言程序的环境,编译+链接
2022-04-21 16:26:00 【不知名小赖】
文章目录
一、程序的翻译环境(编译和链接)
在ANSI C 的任何一种实现中,存在两个不同的环境:
- 第一种是翻译环境,在这个环境中源代码被转换成可执行的机器指令。
- 第二种是执行环境,它用于实际执行代码。
如下图:就是我们编译器编译一个源文件到一个可执行文件的大致过程

- 组成一个程序的每个源文件(test.c)通过编译过程分别转换成目标代码(test.obj)
- 每个目标文件又由链接器(linker)捆绑在一起,形成一个单一而完整的可执行程序。
- 链接器同时会引入标准c函数库中任何被该程序所用到的函数。
对于一个源文件(test.c)变成最终的二进制文件(test.exe)可以通过下图简单表示:


看上图我们知道:编译又分三步:
- 预编译 (预处理)(test.c —>test.i)
(1)处理所有的注释,以空格代替
(2)将所有的#define删除,并展开所有的宏定义
(3)处理条件编译指令#if、#ifdef、#elif、#else、#endif
(4)处理#include,展开被包含的文件
(5)保留编译器需要使用的#pragma指令 - 编译 (test.i —>test.s)
(1)把C语言代码编译成汇编代码
(2)进行语法分析,词法分析,语义分析,符号汇总形成符号表 - 汇编 (test.s —>test.o)
汇编过程实际上指把汇编语言代码翻译成目标机器指令的过程。对于被翻译系统处理的每个C语言源程序,都将最终经过这一处理而得到相应的目标文件。 目标文件中所存放的也就是与源程序等效的目标的机器语言代码。
编译完后执行链接,链接会做哪些事呢?
- 合并段表
- 符号表的合并和符号表的重定位
- 最后形成(test.exe)
二、程序的运行环境
- 程序必须载入内存,在有操作系统的环境中:一般这个由操作系统来完成。在独立的环境中,程序的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成。
- 程序的执行便开始,接着调用main函数。
- 开始执行程序代码,这个时候程序将使用一个运行时堆栈,存储函数的局部变量和返回地址,程序同时也使用静态(static)内存,存储与静态内存中的变量在程序的整个执行过程一直保留他们的值。
- 终止程序。正常终止main函数,也可能是意外终止(代码出错)
版权声明
本文为[不知名小赖]所创,转载请带上原文链接,感谢
https://blog.51cto.com/u_15542682/5237971
边栏推荐
- iOS开发面试攻略(KVO、KVC、多线程、锁、runloop、计时器)
- Test case of kingbasees v8r3 cluster modifying data path of Jincang database
- 菜粕期货是那个交易所上市的?新手怎么期货开户最安全?
- 2022 Chongqing latest construction welder (construction special operation) simulation question bank and answers
- 全国查询水电气费免费接口(二)
- What are the mainstream types of mobile phone screens at present
- .NET Swagger配置
- 在线词典网站
- At2293 [agc009d] unity
- C coordinate click WebBrowser1
猜你喜欢

MinGW Download

The conflict between Russia and Ukraine raised concerns. The five eye network security department suggested that allies strengthen infrastructure protection measures

Add release configuration in clion

昊天旭辉签约长扬科技,携手共建工业互联网安全新生态

物联网的历史演进、应用和安全要求

Servlet

云呐:医院固定资产管理存在的问题及原因,资产管理系统的实施

elmentUI下拉框实现全部功能

.NET Swagger配置

How does PHP convert negative numbers to positive integers
随机推荐
掌握自动化测试必要的几种技能?
目前5G SoC 芯片技术成熟吗?
2022骨传导耳机排名,最好用的骨传导耳机推荐
期约与异步函数
全国查询水电气费免费接口(三)
SQL -- database operation (DDL, DML, DQL) + use the command to view the storage location of the current database (database version query)
排序课后练习题
OJ daily practice - Bonus
elmentUI下拉框实现全部功能
十荟团 小程序 APP自动登录 aes数据解密 学习记录
全国查询水电气费免费接口(二)
Yunna: basic functional features of fixed asset management system in asset intensive enterprises
OJ每日一练——最大公约数与最小公倍数
Problems encountered in the project (IV) @ async usage and its idea of batch processing a large amount of data
C sliding verification code | puzzle verification | slidecaptcha
云呐:大型医疗设备资产管理系统贵吗?医院资产管理的主要内容
The console displays VM + number + file name to debug
es6如何判断数组是否重复
MinGW Download
4.25解锁OpenHarmony技术日!年度盛会,即将揭幕!