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

C语言学习笔记——编译和链接

目录

  • 1 C程序的执行流程
  • 2 翻译环境
    • 2.1 预编译
    • 2.2 编译
      • 2.2.1 词法分析
      • 2.2.2 语法分析
      • 2.2.3 语法分析
    • 2.3 汇编
    • 2.4 链接

1 C程序的执行流程

用户编写好的C程序不能直接被计算机识别并执行,在执行前,要先将源文件和头文件进行编译,生成目标文件,再将目标文件与链接库进行链接,生成最终的可执行程序,再由计算机执行
其中,将源代码转换成可执行的机器指令的过程被称为 翻译环境
执行代码的过程被称为 执行环境
在这里插入图片描述

在这里,主要说明翻译环境所做的事情

2 翻译环境

翻译环境主要有 编译和链接 两个处理过程
编译的过程还可以拆分为 预编译,编译,汇编 三个小的过程
因此,翻译环境的处理过程为 预编译,编译,汇编,链接
在这里插入图片描述

2.1 预编译

预编译阶段所做的事情包括:

  • 在代码中,将 #define 定义的常量用它的值进行替换
  • 将头文件引入至 #include 的位置处
  • 处理条件编译指令,比如:#if,#ifdef,#elif等
  • 删除程序内的所有注释
  • 生成行号和文件名
  • 保留 #pragma 的编译器指令

预编译阶段结束后,会产生 .i 后缀的文件

2.2 编译

编译阶段所做的事情包括 词法分析,语法分析,语义分析及优化
编译结束后,会产生 .s后缀的文件,它保存的都是汇编代码
接下来,针对下面这句代码来进行说明

array[index] = (index+4)*(2+6);

2.2.1 词法分析

在词法分析中要做的事情就是分析代码,将代码拆分成符号
上方的这句代码,就可以做这样子的拆分:
在这里插入图片描述

2.2.2 语法分析

在语法分析中要做的事情是分析词法分析阶段产生的符号,从而得到语法树
上面这句代码的语法树如下:
在这里插入图片描述

2.2.3 语法分析

语法分析要做的事情就是根据语法树来判断正在分析的代码是否有语法错误,因此,如果有语法错误,会在这个阶段报错
在这里插入图片描述

2.3 汇编

汇编阶段要做的事情就是将 编译阶段产生的 .s后缀文件进行解析,生成 .o/.obj 后缀的目标文件,在目标文件内,保存了机器指令,机器指令为计算机可以识别并执行的指令

2.4 链接

每一个源文件,在经过了 预编译,编译,汇编 的过程后,都会生成 .o/.obj 后缀的目标文件,在链接的阶段,就会将这些目标文件链接在一起,生成可执行程序
链接主要有 空间分配,符号决议,重定位 这些过程

http://www.xdnf.cn/news/1263223.html

相关文章:

  • 知识图谱【2】
  • 任务管理器如何查看详细的命令行和路径?
  • 塔罗耳语:免费在线AI塔罗牌占卜工具
  • C++学习笔记
  • 解决 MinIO 上传文件时报 S3 API Requests must be made to API port错误
  • VS Code 快捷键快速插入带年月日时分秒的时间注释
  • Android初学者系统开发学习路线参考
  • Coze Studio 概览(九)--插件管理
  • 解决flex元素内部文本溢出的问题min-width: 0
  • 降低程序运行时CPU和GPU峰值占用的技术方案
  • vue3 遍历 map 用法
  • Vue3 组合式API
  • MyBatis注解开发与接口映射:现代化ORM开发的技术革新
  • 51c视觉~合集16
  • 【深度学习新浪潮】近三年3DGS在大规模场景重建中的研究进展(2022-2025)
  • 平板探测器的主要技术指标
  • Pytest项目_day09(skip、skipif跳过)
  • RabbitMQ详情介绍—七种工作模式
  • 基于AutoDL平台的3D_Gaussian_Splatting初体验
  • Linux系统编程Day9 -- gdb (linux)和lldb(macOS)调试工具
  • mac笔记本如何重新设置ssh key
  • 机器学习 SVM支持向量机
  • 【Git】企业级使用
  • 50系显卡ubuntu20.04安装显卡驱动,解决gazebo不调用显卡的问题
  • 【前端后端部署】将前后端项目部署到云服务器
  • 零成本建站:将 Windows 电脑变身为个人网站服务器
  • MetaBit基金会加码投资图灵协议,深化去中心化金融与元宇宙生态合作
  • windows 上编译PostgreSQL
  • 客户端攻击防御:详解现代浏览器安全措施
  • 【unitrix数间混合计算】2.4 二进制整数标准化处理(src/number/normalize/int_normalize.rs)