什么是编译与链接呢!

news2024/12/24 20:28:56

引言:

在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函数;也有可能是意外终止。

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


点个赞走吧!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1633159.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LabVIEW 2024安装教程(附免费安装包资源)

鼠标右击软件压缩包,选择“解压到LabVIEW.2024”。 返回解压后的文件夹,鼠标右击“ni_labview-2024”选择“装载”。 鼠标右击“Install”选择“以管理员身份运行”。 点击“我接受上述2条许可协议”,然后点击“下一步”。 点击“下一步”。 …

Docker容器中安装vim

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Docker 是一个开源…

uni-app中配置自定义条件编译

前提:官网提供的自定义编译不满足条件 package.json | uni-app官网 下文:不详细写,主要写关键思路 package.json文件 主要看scripts的执行命令,其他依赖就是用vue-cli方式创建uni-app项目生成的 {"name": "un…

计算机组成实验(5)

一、实验目的和要求 1.1 实验目的 1. 复习二进制加减、乘除的基本法则 2. 掌握补码的基本原理和作用 3. 了解浮点数的表示方法及加法运算法则 4. 进一步了解计算机系统的复杂运算操作 1.2 实验要求 1. 熟悉二进制原码补码的概念,了解二进制加减乘除的原理与操作实现。 …

部署YUM仓库和NFS共享存储服务

目录 1. YUM仓库服务 1.1 YUM概述 1.2 准备安装源 1.3 yum在线源替换方法 2.制作YUM源 2.1制作ftp源 3.yum软件包的下载方式 4.NFS共享存储服务 4.1 NFS 4.2 NFS网络文件系统 4.3 NFS配置 1. YUM仓库服务 1.1 YUM概述 yum是一个基于RPM包(是Red-Ha…

AI与新能源催生新增长,电子制造业如何提升预测力与连接力?

国产替代和新基建带来的结构性机遇,AI和新能源汽车行业的增长所带来的需求提升,都给电子制造行业以乐观的理由。但是,不少企业的客户经营管理、供需平衡与供应链协同等所面临的挑战仍在,如何为行业高质量增长持续注入动能&#xf…

Mycat(三)读写分离双主双从

文章目录 搭建双主双从双主机配置双从机配置双从配置两个主机互相复制停止从服务复制功能重新配置主从 修改 Mycat 的集群配置实现多种主从双主双从集群角色划分增加两个数据源修改集群配置文件读写分离配置扩展(1)读写分离(一主一从,无备)(m是主,s是从)…

不同规模企业如何进行系统集成?

摘要:系统集成作为企业信息化建设的重要组成部分,其实施策略和方法在不同规模的企业中存在着显著的差异。以下是针对小型、中型、大型企业在系统集成方面所做的六点深度对比: 1. 集成需求复杂度 •小型企业:系统集成需求相对简单…

Stable Diffusion教程:文生图

最近几天AI绘画没有什么大动作,正好有时间总结下Stable Diffusion的一些基础知识,今天就给大家再唠叨一下文生图这个功能,会详细说明其中的各个参数。 文生图是Stable Diffusion的核心功能,它的核心能力就是根据提示词生成相应的…

kali打镜像教程

用户名:kali 密码:kali 去如下网站下载kali镜像http://2.https://www.kali.org/get-kali/#kali-live 2.使用制作镜像工具制作镜像,格式化U盘制作为启动盘,下面是选择格式化哪个u盘 https://pan.baidu.com/s/1r7b3KynfWASqM-2B…

IDEA调试远程服务器项目

IDEA调试远程服务器项目(IDEA) 一、使用场景 1.很多时候,大家在本地开发项目,测试都没有问题。 2.部署服务器后,可能是因为服务的器的原因,或者网络原因等等,难免会出现一点点意向不到的问题。 3.本地又无法复现&…

C++实现高性能并行计算——1.pthreads并行编程(上)

系列文章目录 pthreads并行编程(上)pthreads并行编程(中)pthreads并行编程(下)使用OpenMP进行共享内存编程 文章目录 系列文章目录前言一、PthreadsPthreads 库的主要特性包括: 二、Hello World程序2.1 准备工作2.2 启动线程2.3 运行线程2.3.1 线程函数 2.4 停止线…

win10 配置OpenCV LNK2019 无法解析的外部符号 “void __cdecl cv::imshow

1 遇到问题 严重性 代码 说明 项目 文件 行 禁止显示状态 详细信息 错误 LNK2019 无法解析的外部符号 “void __cdecl cv::imshow(class std::basic_string<char,struct std::char_traits,class std::allocator > const &,class cv::debug_build_guard::_InputArray…

照片彻底删除了如何恢复?学会这5招恢复不求人!

我们的日常生活已经离不开视频和照片&#xff0c;很多小伙伴在清理各种电脑文件和SD卡时&#xff0c;很容易误删除一些重要的视频和照片&#xff0c;那么如何找回删除的视频和照片&#xff1f;下面一起来看看↓↓↓ 找回删除的视频和照片教程一、备份恢复 备份是防止数据丢失…

基于springboot+vue+Mysql的生鲜交易系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

系统性文献综述的撰写(Systematic Review)

文献综述 什么是文献综述 对某一个“领域、专业、课题、问题、研究专题”&#xff0c;通过搜集大量的相关资料&#xff08;别人发表的论文&#xff09;&#xff0c;然后通过“阅读、分析、归纳、整理”给出最新进展、学术见解或建议。对其做出综合性介绍和阐述的一种学术论文…

吴恩达机器学习笔记:第 8 周-14降维(Dimensionality Reduction) 14.3-14.5

目录 第 8 周 14、 降维(Dimensionality Reduction)14.3 主成分分析问题14.4 主成分分析算法14.5 选择主成分的数量 第 8 周 14、 降维(Dimensionality Reduction) 14.3 主成分分析问题 主成分分析(PCA)是最常见的降维算法。 在 PCA 中&#xff0c;我们要做的是找到一个方向…

基于SpringBoot和PostGIS的各省与地级市空间距离分析

目录 前言 一、PostGIS时空库 1、时空表设计 2、空间数据管理与查询 二、后台接口设计 1、ORM层设计与实现 2、业务层设计与实现 3、控制层设计 三、web可视化设计与实现 1、省份范围展示 2、城市距离可视化 3、成果展示 总结 前言 在上一篇博客中基于Java和GDAL实…

npm安装时一直idealTree:npm: sill idealTree buildDeps卡住不动

npm安装时一直idealTree:npm: sill idealTree buildDeps卡住不动 解决步骤&#xff1a; 1.去以下的目录中删掉.npmrc文件&#xff08;只在C:\User.npmrc&#xff09; 2.清除缓存&#xff0c;使用npm cache verify 不要用npm cache clean --force&#xff0c;容易出现npm WAR…

科智牧RFID电子耳标识读器-GALLAGHER盖力格平替之王

在畜牧业管理中&#xff0c;RFID技术的应用日益广泛。而科智牧作为畜牧业RFID行业的领先品牌&#xff0c;其RFID电子耳标识读器的性能不输于GALLAGHER盖力格的电子耳标识读器产品。采用RFID无线射频识别技术&#xff0c;能够快速、准确地读取动物耳标中的信息&#xff0c;无需直…