当前位置: 首页 > news >正文

【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.lryc.cn/news/354339.html

相关文章:

  • 2024年5月27日 十二生肖 今日运势
  • 【Text2SQL 论文】SeaD:使用 Schema-aware 去噪训练的 end2end 的 Text2SQL
  • python数据分析——apply 1
  • Spring Boot 项目统一异常处理
  • 安卓手机APP开发__网络连接性支持VPN
  • Shopee单个商品详情采集
  • 深入研究Qt Meta - Object System
  • web学习笔记(五十八)
  • 精准安全运维,统信UOS服务器版V20(1070)漏洞修复指南丨年度更新
  • Vue3实战笔记(46)—Vue 3高效开发定制化Dashboard的权威手册
  • MySQL为什么会选错索引
  • kafka调优参考建议 —— 筑梦之路
  • Redis(十三) 事务
  • RK 11.0 多屏模式下修改鼠标进入方式
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • 浅析部署架构中的GZone、RZone和CZone
  • 【全开源】分类记账小程序系统源码(ThinkPHP+FastAdmin+UniApp)
  • Android NDK系列(四)NDK的编译
  • Jenkins--从入门到入土
  • 文心一言 VS 讯飞星火 VS chatgpt (267)-- 算法导论20.2 2题
  • C 语言设计模式(结构型)
  • 【云原生--K8S】K8S python接口研究
  • 5.26作业
  • 链接库文件体积优化工具篇:bloaty
  • 使用pyqt绘制一个爱心!
  • 关于 Transformer 的11个常见面试题
  • OS多核多线程锁记录笔记
  • nginx做TCP代理
  • python 异常处理 try
  • 月入10万+管道收益,揭秘旅游卡运营的5个阶段!