【C语言回顾】编译和链接

  • 前言
  • 1. 编译
  • 2. 链接
  • 结语

在这里插入图片描述
在这里插入图片描述

上期回顾: 【C语言回顾】文件操作
个人主页:C_GUIQU
归属专栏:【C语言学习】

前言

各位小伙伴大家好!上期小编给大家讲解了C语言中的文件操作,接下来我们讲解一下编译和链接!

1. 编译

  1. 预处理(Preprocessing)
    • 宏定义处理:展开源代码中的宏定义,例如#define PI 3.14159
    • 文件包含:处理#include指令,将头文件的内容插入到源文件中。
    • 条件编译:根据#ifdef#ifndef等条件编译指令,选择性地编译代码片段。
    • 删除注释:删除源代码中的注释。
    • 预处理后,生成一个.i.ii文件。
  2. 编译(Compilation)
    • 词法分析:将预处理后的文本分割成一个个的记号(token)。
    • 语法分析:根据C语言的语法规则,将记号组织成语法结构,如表达式、语句、声明等,形成抽象语法树(AST)。
    • 语义分析:检查语法结构的语义是否正确,如变量类型匹配、作用域规则等。
    • 代码生成:将AST转换成中间代码,再进一步优化和转换成目标代码,通常是汇编语言。
    • 编译后,生成汇编语言文件,通常是.s文件。

2. 链接

  1. 汇编(Assembly)
    • 汇编:将汇编语言文件(.s)转换成机器语言指令,生成目标代码(.o.obj)。
    • 目标代码中包含机器指令,但不包含全局变量和函数的地址信息。
  2. 链接(Linking)
    • 合并段:将所有目标文件的.text(代码段)、.data(已初始化数据段)、.bss(未初始化数据段)合并。
    • 符号解析:将各个目标文件中引用的符号(如函数和变量)解析为具体的地址。
    • 重定位:确定所有符号的最终地址,并修改代码中的引用地址。
    • 消除冗余:去除未使用的函数和变量,优化最终的可执行文件。
    • 链接后,生成可执行文件(如Windows下的.exe,Linux下的无后缀文件)。
      在整个过程中,编译器和链接器是两个关键的工具。编译器负责将源代码转换成机器代码,而链接器负责将编译后的代码合并成一个可执行文件。这两个步骤是C程序开发中不可或缺的部分,理解它们有助于更好地进行程序开发和调试。

结语

以上就是小编对编译和链接的详细讲解。
如果觉得小编讲的还可以,还请一键三连。互三必回!
持续更新中~!

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

H5扫描二维码相关实现

H5 Web网页实现扫一扫识别解析二维码,就现在方法的npm包就能实现,在这个过程中使用过html5-qrcode 和 vue3-qr-reader。 1、html5-qrcode的使用 感觉html5-qrcode有点小坑,在使用的时候识别不成功还总是进入到错误回调中出现类似NotFoundExc…

Python怎样将PDF拆分成多个文件

在 Python 中,你可以使用 PyPDF2 库来拆分 PDF 文件。以下是一个简单的示例,演示如何将一个 PDF 文件拆分为多个单页 PDF 文件。 首先,你需要安装 PyPDF2 库。如果尚未安装,可以使用以下命令进行安装: pip install P…

天干物燥小心火烛-智慧消防可视化大屏,隐患防治于未然。

智慧消防可视化大屏通常包括以下内容: 1.实时监控: 显示消防设备、传感器、监控摄像头等设备的实时状态和数据,包括火灾报警、烟雾报警、温度报警等。 2.建筑结构: 显示建筑物的结构图和平面图,包括楼层分布、消防通…

VLC播放器(全称VideoLAN Client)

一、简介 VLC播放器(全称VideoLAN Client)是一款开源的多媒体播放器,由VideoLAN项目团队开发。它支持多种音视频格式,并能够在多种操作系统上运行,如Windows、Mac OS X、Linux、Android和iOS等。VLC播放器具备播放文件…

特殊变量笔记3

输入一个错误命令, 在输出$? 特殊变量:$$ 语法 $$含义 用于获取当前Shell环境的进程ID号 演示 查看当前Shell环境进程编号 ps -aux|grep bash输出 $$ 显示当前shell环境进程编号 小结 常用的特殊符号变量如下 特殊变量含义$n获取输入参数的$0, 获取当前She…

hugging face笔记:PEFT

1 介绍 PEFT (Parameter-Efficient Fine Tuning) 方法在微调时冻结预训练模型参数,并在其上添加少量可训练的参数(称为适配器)这些适配器被训练用来学习特定任务的信息。这种方法已被证明在内存效率和计算使用上非常高效,同时能产…

线性模型--普通最小二乘法

线性模型 一、模型介绍二、用于回归的线性模型2.1 线性回归(普通最小二乘法) 一、模型介绍 线性模型是在实践中广泛使用的一类模型,该模型利用输入特征的线性函数进行预测。 二、用于回归的线性模型 以下代码可以在一维wave数据集上学习参…

基于51单片机的超声波液位测量与控制系统

基于51单片机液位控制器 (仿真+程序+原理图PCB+设计报告) 功能介绍 具体功能: 1.使用HC-SR04测量液位,LCD1602显示; 2.当水位高于设定上限的时候,对应声光报警报警&am…

手机卡该地块

package demo; package demo; public class Phonetest { public static void main(String[] args) { Phone pnew Phone(); p.brand"小米"; p.price1998.98; System.out.println(…

在业务开发中使用ElasticSearch的指导手册

文章目录 该业务为什么需要ElasticSearch? / 该业务需要ElasticSearch的核心功能是哪些?正确示例错误示例 如何快速验证分词是否能够满足业务需求?分词不满足,如何自定义分词? 业务数据的字段类型映射是否合理?实践中…

MySQL设置表自增步长

在MySQL数据库管理中,自增字段(AUTO_INCREMENT)是一种常见且重要的功能,通常用于生成唯一的标识符(如主键)。然而,在多种应用场景下,默认的自增步长(1)可能无…

【InternLM实战营第二期笔记】02:大模型全链路开源体系与趣味demo

文章目录 00 环境设置01 部署一个 chat 小模型02 Lagent 运行 InternLM2-chat-7B03 浦语灵笔2 第二节课程视频与文档: https://www.bilibili.com/video/BV1AH4y1H78d/ https://github.com/InternLM/Tutorial/blob/camp2/helloworld/hello_world.md 视频和文档内容基…

003 CentOS 7.9 mysql8.3.0安装及配置

文章目录 Windows PowerShell测试端口安装及配置1. 下载MySQL安装包2. 解压安装包3. 安装MySQL4. 启动MySQL服务5. 获取并设置MySQL root密码6. 创建数据库7. 配置远程连接(可选) 卸载mysql检查并卸载已有的MySQL或MariaDB: https://download…

云计算和大数据处理

文章目录 1.云计算基础知识1.1 基本概念1.2 云计算分类 2.大数据处理基础知识2.1 基础知识2.3 大数据处理技术 1.云计算基础知识 1.1 基本概念 云计算是一种提供资源的网络,使用者可以随时获取“云”上的资源,按需求量使用,并且可以看成是无…

AWS安全性身份和合规性之WAF(Web Application Firewall)

AWS WAF(Web Application Firewall)是一项AWS托管的网络安全服务,用于保护Web应用程序免受常见的Web攻击,如SQL注入、跨站脚本(XSS)、跨站请求伪造(CSRF)等。 应用场景:…

STM32应用开发进阶--IIC总线(SHT20温湿度+HAL库_硬件I2C)

实现目标 1、掌握IIC总线基础知识; 2、会使用软件模拟IIC总线和使用STM32硬件IIC总线; 3、 学会STM32CubeMX软件关于IIC的配置; 4、掌握SHT20温湿度传感器的驱动; 5、具体目标:(1)用STM32硬件IIC驱动S…

49 序列化和反序列化

本章重点 理解应用层的作用,初识http协议 理解传输层的作用,深入理解tcp的各项特性和机制 对整个tcp/ip协议有系统的理解 对tcp/ip协议体系下的其他重要协议和技术有一定的了解 学会使用一些网络问题的工具和方法 目录 1.应用层 2.协议概念 3. 网络计…

CSRF跨站请求伪造实战

目录 一、定义 二、与XSS的区别 三、攻击要点 四、实战 一、定义 CSRF (Cross-site request forgery,跨站请求伪造),攻击者利用服务器对用户的信任,从而欺骗受害者去服务器上执行受害者不知情的请求。在CSRF的攻击场景中,攻击…

Django模板层——模板引擎配置

作为Web 框架,Django 需要一种很便利的方法以动态地生成HTML。最常见的做法是使用模板。 模板包含所需HTML 输出的静态部分,以及一些特殊的语法,描述如何将动态内容插入。 模板引擎配置 模板引擎使用该TEMPLATES设置进行配置。这是一个配置列…