什么是编译与链接呢!

简介: 什么是编译与链接呢!

引言:

在ANSIC中存在两种编译环境


第一种是翻译环境:可以将环境中的源代码转换成能被机器执行的二进制指令;翻译环境即为我们所使用的编译器,可以将test.c文件翻译为test.exe文件


第二种是运行环境:它用于实际代码的执行;一般为操作系统对test.exe文件编译的结果

编译环境

那编译环境是如何将源代码转换为能被机器所执行的二进制指令呢  

在翻译环境中,是由编译与链接两个过程构成的,而编译包含预处理、编译、汇编三个过程    

在我们在写一个C语言的项目时,可能由多个.c文件的创建,那多个文件是怎样编译的呢?

此时我们继续将编译拆解

答:

  • 多个.c文件单独经过编译出编译处理生产对应的目标文件。
  • 注:在Windows环境下的目标文件的后缀是 .obj ,Linux环境下目标文件的后缀是 .o
  • 多个目标文件和链接库⼀起经过链接器处理生成最终的可执行程序。
  • 链接库是指运行时库(它是支持程序运行的基本函数集合)或者第三方库。

预处理

在预处理阶段那种,会将源文件和头文件处理为后缀为i的文件

预处理会主要处理#开始的指令

1.将所有的#define指令删除,展开宏定义

#define a 10
 
int main (){
int b = a;//当进行预处理时,此语句将变为 int b = 10;
 而将#define删除
return 0;
}

2.处理所有的条件编译指令,如: #if、#ifdef、#elif、#else、#endif

int main()
{
  int a = 10;
  int b = 20;
  int c = 30;
  int d = a + b;//d ==30
#if 0//如果为1,则正常运行下句
  int e = a + c;
#endif
  //相当于注释掉此句
  return 0;
}

3.处理#include 预编译指令,将包含的头文件的内容插入到该预编译指令的位置。这个4.过程是递归进行的,也就是说被包含的头文件也可能包含其他文件。

5.删除所有的注释

6.添加行号和文件名标识,方便后续编译器生成调试信息等。

7.或保留所有的#pragma的编译器指令,编译器后续会使用。

运行环境

1.程序必须载入内存中。在有操作系统的环境中:一般这个由操作系统完成。在独立的环境中,程序的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成。

2.程序的执行便开始。接着便调用main函数。

3.开始执行程序代码。这个时候程序将使用一个运行时堆栈(stack),存储函数的局部变量和返回地址。程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程一直保留他们的值。

4.终止程序。正常终止main函数;也有可能是意外终止。

当我们学到这里,想必你已经学会了机器是怎样执行程序的吧!!!


点个赞走吧!!!


相关文章
|
Python
在Python中,哈希表
在Python中,哈希表
281 1
|
9月前
|
机器学习/深度学习 算法 数据可视化
基于Qlearning强化学习的机器人迷宫路线搜索算法matlab仿真
本内容展示了基于Q-learning算法的机器人迷宫路径搜索仿真及其实现过程。通过Matlab2022a进行仿真,结果以图形形式呈现,无水印(附图1-4)。算法理论部分介绍了Q-learning的核心概念,包括智能体、环境、状态、动作和奖励,以及Q表的构建与更新方法。具体实现中,将迷宫抽象为二维网格世界,定义起点和终点,利用Q-learning训练机器人找到最优路径。核心程序代码实现了多轮训练、累计奖励值与Q值的可视化,并展示了机器人从起点到终点的路径规划过程。
427 0
|
12月前
|
存储 机器学习/深度学习 人工智能
阿里云服务器第八代通用型g8i实例评测:性能与适用场景解析
阿里云服务器通用型g8i实例怎么样?g8i实例采用CIPU+飞天技术架构,并搭载最新的Intel 第五代至强可扩展处理器(代号EMR),不仅性能得到大幅提升,同时还拥有AMX加持的AI能力增强,以及全球范围内率先支持的TDX机密虚拟机能力。这些特性使得g8i实例在AI增强和全面安全防护两大方面表现出色,尤其适用于在线音视频及AI相关应用。本文将深入探讨g8i实例的产品特性、优势、适用场景及规格族,以帮助您更好地了解这款产品,以供参考和选择。
|
Java 开发者 Spring
深入解析 @Transactional:Spring 事务管理的艺术及实战应对策略
深入解析 @Transactional:Spring 事务管理的艺术及实战应对策略
264 2
|
人工智能 安全 JavaScript
《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》学习笔记——HarmonyOS纯血鸿蒙新特性
HarmonyOS 3.1引入了Stage模型,增强ArkTS语言、应用程序框架、Web、ArkUI等子系统能力。新增功能包括Ability框架的Stage开发模型、ArkUI组件能力提升、应用包管理接口、公共基础类库支持Buffer读写、Web服务文档预览及编辑、图形图像编解码支持等。从API 9开始,Stage模型成为主要开发模型,支持更灵活的应用生命周期管理和窗口调度,提供更好的组件与窗口弱耦合体验。此外,HarmonyOS NEXT开发者预览版实现了全面自研,被称为“纯血鸿蒙”,具备自主可控、高度弹性、更强的安全性和隐私保护特性。
917 21
|
存储 算法 安全
什么是SHA-256值
【8月更文挑战第24天】什么是SHA-256值
1667 1
|
人工智能 弹性计算 API
通义万相AI绘画创作体验评测
从使用者的角度解读通义万相AI绘画创作方案的优与劣
11834 12
|
JavaScript API 数据格式
【Vue 3】如何封装一个超级好用的 Hook!
【Vue 3】如何封装一个超级好用的 Hook!
|
存储 SQL 关系型数据库
Mysql多表数据需进行联动修改得方案
Mysql多表数据需进行联动修改得方案

热门文章

最新文章