首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【C语言】编译链接

【C语言】编译链接

作者头像
风中的云彩
发布2025-01-24 10:32:08
发布2025-01-24 10:32:08
4740
举报
文章被收录于专栏:C/C++的自学之路C/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/142288412

https://cloud.tencent.com/developer/article/2464258

两种环境

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

翻译环境

翻译环境是由编译链接两个过程组成。 编译过程又可以分为预处理编译翻译三个过程。

翻译过程

⼀个C语言的项目中可能有多个.c文件⼀起构建。 多个.c文件单独经过编译器编译处理生成对应的目标文件。(在Windows环境下的目标文件的后缀是.objLinux环境下目标文件的后缀是.o) 多个目标文件链接库⼀起经过链接器处理生成最终的可执行程序

编译

预处理

在预处理阶段,源文件和头文件会被处理成为.i为后缀的文件。 预处理阶段主要处理那些源文件中那些以#开始的预编译指令。 将所有的#define删除,并展开所有的宏定义。 处理#include预编译指令,将包含的头文件的内容插入到该预编译指令的位置。这个过程是递归进行的,也就是说被包含的头文件也可能包含其他文件。 删除所有的注释,添加行号文件名标识,方便后续编译器生成调试信息等。

编译

编译过程 就是将预处理后的文件进行⼀系列的: 词法分析语法分析语义分析及优化 ,生成相应的 汇编代码文件 。(将 C语言代码 转化成 汇编代码 )

词法分析

源代码程序 输入 扫描器 中, 扫描器 进行 词法分析 ,把代码中的 字符 分割成⼀系列的 记号关键字、标识符、字面量、特殊字符等 )。

语法分析

语法分析器对扫描产生的记号进行语法分析,从而产生语法树。 这些语法树是以表达式为节点的树

语义分析

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

汇编

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

链接

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

运行环境

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

致谢

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 两种环境
  • 翻译环境
    • 翻译过程
    • 编译
      • 预处理
      • 编译
      • 汇编
    • 链接
  • 运行环境
  • 致谢
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档