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

【C语言】编译链接

你不用对每个过客负责,也不用对每个路人说教。 

前言

  这是我自己学习C语言的第八篇博客总结。后期我会继续把C语言学习笔记开源至博客上。

  上一期笔记是关于C语言的自定义类型,没看的同学可以过去看看:【C语言】自定义类型-CSDN博客https://blog.csdn.net/hsy1603914691/article/details/142288412https://blog.csdn.net/hsy1603914691/article/details/142288412https://blog.csdn.net/hsy1603914691/article/details/142288412https://blog.csdn.net/hsy1603914691/article/details/142288412https://blog.csdn.net/hsy1603914691/article/details/142288412

两种环境

1. 翻译环境 源代码 被转换为 可执行的机器指令 ( 二进制指令 ),生成 可执行程序
2. 运行环境 ,实际 执行可执行程序

翻译环境 

1. 翻译环境是由编译链接两个过程组成。       

2. 编译过程又可以分为预处理编译翻译三个过程。                                                         

翻译过程 

1. ⼀个C语言的项目中可能有多个.c文件⼀起构建。

2. 多个.c文件单独经过编译器编译处理生成对应的目标文件。(在Windows环境下的目标文件的后缀是.objLinux环境下目标文件的后缀是.o)

3. 多个目标文件链接库⼀起经过链接器处理生成最终的可执行程序

编译   

预处理

1. 在预处理阶段,源文件和头文件会被处理成为.i为后缀的文件

2. 预处理阶段主要处理那些源文件中那些以#开始的预编译指令

3. 将所有的#define删除,并展开所有的宏定义

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

5. 删除所有的注释,添加行号文件名标识,方便后续编译器生成调试信息等。

编译

1. 编译过程 就是将预处理后的文件进行⼀系列的: 词法分析 语法分析 语义分析及优化 ,生成相应的 汇编代码文件 。(将 C语言代码 转化成 汇编代码 )
词法分析
1. 源代码程序 输入 扫描器 中, 扫描器 进行 词法分析 ,把代码中的 字符 分割成⼀系列的 记号 关键字、标识符、字面量、特殊字符等 )。
语法分析 

1. 语法分析器对扫描产生的记号进行语法分析,从而产生语法树

2. 这些语法树是以表达式为节点的树

语义分析
1. 语义分析器 进行 语义分析 ,即对表达式的语法层面分析。编译器所能做的分析是语义的 静态分析
2. 静态语义分析通常包括 声明和类型的匹配 类型的转换 等。这个阶段会 报告错误的语法信息

汇编

1. 汇编器 是将 汇编代码 转变成 机器可执行的指令 ,每⼀个 汇编语句 几乎都对应⼀条 机器指令 。就是根据 汇编指令 机器指令 的对照表⼀⼀的进行翻译,也不做指令优化。

链接 

1. 链接是⼀个复杂的过程,链接的时候需要把⼀堆文件链接在⼀起才生成 可执行程序
2. 链接过程主要包括: 地址和空间分配 符号决议 重定位 等这些步骤。
3. 链接解决的是⼀个项目中多文件、多模块之间 互相调用 的问题。

运行环境 

1. 操作系统会自动帮用户完成操作。

致谢 

  感谢您花时间阅读这篇文章!如果您对本文有任何疑问、建议或是想要分享您的看法,请不要犹豫,在评论区留下您的宝贵意见。每一次互动都是我前进的动力,您的支持是我最大的鼓励。期待与您的交流,让我们共同成长,探索技术世界的无限可能!


http://www.kler.cn/a/515894.html

相关文章:

  • IPhone16 Pro 设备详情
  • 《机器学习数学基础》补充资料:贝叶斯分类器
  • 【C++图论 并集查找】2492. 两个城市间路径的最小分数|1679
  • mapbox加载geojson,鼠标移入改变颜色,设置样式以及vue中的使用
  • 【时时三省】(C语言基础)文件的顺序读写
  • 【云网】云网络基础概念(华为云)
  • 软考信安26~大数据安全需求分析与安全保护工程
  • 【C++笔记】哈希表底层实现的深度剖析
  • 车间设备数据采集解决方案
  • 智能体的核心技能之插件,插件详解和实例 ,扣子免费系列教程(11)
  • Elixir语言的Web开发
  • 知识产权API:助力金融业投资决策等场景提效!
  • 从理论到实践:Django 业务日志配置与优化指南
  • Facebook新品广告ROI一周速成攻略
  • 2.体验vue
  • 【若依】添加定时任务
  • ansible自动化运维实战--复制模块和用户模块(3)
  • 【0x06】HCI_Authentication_Complete事件详解
  • Solr与Elasticsearch 的对比与选型
  • Unity中关于实现 管道水流+瀑布流动+大肠蠕动效果笔记
  • HTML5 新表单属性详解
  • 深度剖析聚合 CPS 分销与 CPA 推广系统:打破收益枷锁,开启创业新篇
  • WebSocket异步导出
  • 笋瓜果实的代谢组学和转录组分析-文献精读103
  • [ Spring ] Spring Cloud Gateway 2025 Comprehensive Overview
  • ESP32C3使用Audiuno搭建开发环境入门