零基础非科班也能掌握的C语言知识21 编译链接(介于作者实力有限并且没有可以演示的过程软件仅仅浅谈)

news2024/11/26 2:46:11

编译链接

  • 1.翻译环境和运行环境
  • 2.翻译环境
    • 2.1 编译
      • 2.1.1 预处理(预编译)
      • 2.1.2 编译
      • 2.1.3 汇编
    • 2.2 链接
  • 3.运行环境

1.翻译环境和运行环境

ANSI C的任何⼀种实现中,存在两个不同的环境。

  • 编译环境
  • 运行环境
    在这里插入图片描述

2.翻译环境

  • 翻译环境由编译和链接两个大的过程组成的,而编译又可以分解成:预处理(也叫预编译)、编译、汇编三个过程
    在这里插入图片描述
    一个项目中有多个C语言文件,那多个.c文件如何生成可执行程序呢
    多个.c文件单独经过编译器,编译处理生成对应的目标文件,多个目标文件和链接库一起经过链接器处理生成最终的可执行程序
    那么接下来重点讲编译过程中的三个过程
    在这里插入图片描述

2.1 编译

译又可以分解成:预处理(也叫预编译)、编译、汇编三个过程

2.1.1 预处理(预编译)

在预编译阶段,源文件和头文件会被处理成为.i为后缀的文件
大家若有VSCode可以自己尝试(博主并没有的说)

gcc -E test.c -o test.i

在这里插入图片描述

2.1.2 编译

编译过程就是将预处理后的文件进行一系列的:词法分析、语法分析、语法分析及优化,生成相应的汇编代码文件。
编译过程的命令如下:

gcc -S test.i -o test.s

例子
array[index] = (index+4)*(2+6);
语法分析
词法分析(英语:lexical analysis)是计算机科学中将字符序列转换为单词(Token)序列的过程
词法分析
在这里插入图片描述
语法分析
语法分析是编译过程的一个逻辑阶段。语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,如“程序”,“语句”,“表达式”等等.语法分析程序判断源程序在结构上是否正确.源程序的结构由上下文无关文法描述.语法分析程序可以用YACC等工具自动生成。
在这里插入图片描述
语义分析
语义分析是编译过程的一个逻辑阶段, 语义分析的任务是对结构上正确的源程序进行上下文有关性质的审查,进行类型审查。语义分析是审查源程序有无语义错误,为代码生成阶段收集类型信息。比如语义分析的一个工作是进行类型审查,审查每个算符是否具有语言规范允许的运算对象,当不符合语言规范时,编译程序应报告错误。
在这里插入图片描述

2.1.3 汇编

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

gcc -c test.s -o test.o

2.2 链接

链接是⼀个复杂的过程,链接的时候需要把⼀堆⽂件链接在⼀起才⽣成可执⾏程序。
链接过程主要包括:地址和空间分配,符号决议和重定位等这些步骤。
链接解决的是⼀个项⽬中多⽂件、多模块之间互相调⽤的问题。
例子
在这里插入图片描述
在test.c文件中我们会给函数main和Add一个地址,当然我们在test.c文件中找不到Add函数,此时我们会给一个虚假的地址,然后在add.c文件中我们也会给函数Add一个地址,在链接过程中test.c文件中Add函数的地址会被替换成add.c文件中的Add函数的地址,当然这里只是浅谈,感兴趣的话大家去了解

3.运行环境

  • 程序必须载⼊内存中。在有操作系统的环境中:⼀般这个由操作系统完成。在独⽴的环境中,程序的载⼊必须由⼿⼯安排,也可能是通过可执⾏代码置⼊只读内存来完成。
  • 程序的执⾏便开始。接着便调⽤main函数。
  • 开始执⾏程序代码。这个时候程序将使⽤⼀个运⾏时堆栈(stack),存储函数的局部变量和返回地址。程序同时也可以使⽤静态(static)内存,存储于静态内存中的变量在程序的整个执⾏过程⼀直保留他们的值。
  • 终⽌程序。正常终⽌main函数;也有可能是意外终⽌。

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

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

相关文章

极氪汽车交出上市首份答卷:业绩交付“双开花”,新车型质量保优

近日,极氪汽车(NYSE:ZK,下同“极氪”)发布2024年第一季度财报,这也是该公司自5月20日登陆美股以来对外披露的首份业绩报告。 极氪汽车是继“蔚小理”之后第四家在美国上市的新能源车企,发布至今…

图形学初识--定义摄像机类(实战)

文章目录 前言正文定义摄像机的操作方式键盘操作鼠标操作 定义摄像机类核心数据视图矩阵回顾:模拟摄像机的移动模拟摄像机的旋转 结尾:喜欢的小伙伴点点关注赞哦! 前言 前面一些章节讲解了图形学的比较原理性的内容,这一章节咱就实战一下&am…

监控登录用户数

检查登录用户数 当登录系统用户数超过3个报警,并发送邮件提示 首先,配置发送邮件功能。 1、安装mailx [rootnode1 ~]# yum install mailx2、配置/etc/mail.rc [rootnode1 ~]# vim /etc/mail.rc set fromxxx163.com #发件人地址 set smtpsmtp.163…

深层网络:层数多真的更好吗?

深层网络:层数多真的更好吗? 在深度学习的世界里,"深度"始终是一个热门话题。随着技术的发展,我们有了越来越多的方法来构建更深的神经网络,这似乎暗示着“层数越多,效果越好”。然而&#xff0…

通用大模型与垂直大模型:双轨并进的人工智能未来

在人工智能(AI)的浩瀚宇宙中,大模型以其强大的学习能力和广泛的适用性,正逐步成为推动技术进步和产业革新的核心动力。在这股浪潮中,通用大模型与垂直大模型如同两颗璀璨的星辰,各自散发着独特的光芒,共同照亮了AI发展…

哪个品牌洗地机专业?四款明星精湛产品集结

当代快节奏的生活,人们每天下班回到家只想瘫倒在沙发,打扫卫生成为了一种负担......但洗地机的出现,大大的减轻了人们地板清洁的焦虑,因为它只需轻轻地推拉机子转悠房屋一圈,地面上的赃污便能清理干净,清洁…

如何优化大屏网站的响应式设计?技巧一览

为了显示不同屏幕尺寸设备的显示效果,有必要优先考虑响应设计,因为开发人员可以在不同的设备中构建应用程序。响应设计是一种灵活的设计,可以兼顾多屏幕和多场景,可以使我们的网页布局在各种屏幕下呈现出更好的效果。今天&#xf…

“JS加密在线”:简单直接的在线JS加密网站

网站名:“JS加密在线”, 功能:JavaScript源代码加密。 UI: http://jsjiami.online/ 非常简洁的JS加密网站,几乎只有两个功能:上传JS文件、下载加密后的JS文件。 JS加密,就应该这样简单直接。…

Splashtop 荣获“2024年安全校园白金奖”

2024年6月12日 加利福尼亚州库比蒂诺 作为远程访问和 IT 支持领域的领先企业,Splashtop 很荣幸地宣布获得“2024年安全校园白金奖”。Splashtop 的 Foxpass Cloud RADIUS 解决方案在专注校园安全的重要杂志《今日校园安全》颁发的访问控制和云端管理类别奖项中荣获…

Hyper-V 安装Win11注意事项

1. 安装前检查设置,勾选TPM2. 启动的时候要一直按F2,否则提示找不到系统镜像 3. 安装完成后开机后在查看里取消增强会话,否则开机进入锁屏界面,无法输入密码进入系统。一般这种情况出现在通过微软账户登录的系统,可首…

CG-85C 振弦式土压力计厂家 结构物内部土压力变化量如何测量?

产品概述 振弦式土压力计由背板、感应板、信号传输电缆、振弦及激振电磁线圈等组成,是了解被测结构物内部土压力变化量、并可同步测量埋设点温度的监测设备。 功能特点 ◆精度高,能够提供准确的测量结果。 ◆稳定性好,不易受到外界因素的…

后端开发面经系列 -- 小鹏汽车一面面经

小鹏汽车一面面经 公众号:阿Q技术站 来源:职言详情页 (maimai.cn) 文章目录 小鹏汽车一面面经1、String类型为什么不可变?1. 安全性2. 缓存和性能优化3. 哈希码缓存4. 类设计和接口5. 简单性和可读性 2、在浏览器中输入url地址到显示主页的过…

Anti-ABCD3 Antibody-Monoclonal Antibody against Human ABCD3

本篇是对Atlas生产的Anti-ABCD3 Antibody的简单介绍,如需购买该产品或了解更多产品详情,可联系一级代理商欣博盛生物。 产品名称:Anti-ABCD3 Antibody 品牌:Atlas antibodies 货号:AMAb90995 规格:100ul…

大模型「训练」与「微调」概念详解【6000字长文】

本文你将学到什么 1、大模型预训练与微调的基本流程 2、预训练、训练、后期预训练、微调的区别 3、大模型训练与微调的一些概念,如: Post-pretrain、SFT、RLHF、模型对齐、Lora、Q-Lora、大模型量化、微调指标、微调参数、大模型评测指标 预训练与微…

AI Agent 热门的10篇论文

人工智能代理领域广阔,涵盖广泛的主题,包括多代理系统、强化学习、上下文感知系统以及将大型语言模型 (LLMs) 集成到基于代理的系统中。以下是 arXiv 的一些顶级论文,涵盖了人工智能代理的各个方面: A Framework For Intelligent Multi Agent System Based Neural Network …

[深度学习]使用python转换pt并部署yolov10的tensorrt模型封装成类几句完成目标检测加速任务

【简单介绍】 使用Python将YOLOv10模型从PyTorch格式(.pt)转换为TensorRT格式,并通过封装成类来实现目标检测加速任务,是一个高效且实用的流程。以下是该过程的简要介绍: 模型转换: 利用官方提供导出命令…

69. UE5 RPG 使用Gameplay Cue 实现技能表现效果

在上一章中,我们实现了敌人的攻击技能的特效和音效。如果我们在多人模式下打开,发现,其它客户端看不到对应的效果。 造成这种问题的原因是因为敌人的技能是运行在服务器端的,它只复制到拥有它的客户端,而敌人的效果对于…

2024最新流媒体在线音乐系统网站源码 音乐社区 多语言开心版

本文选自:2024最新流媒体在线音乐系统网站源码 音乐社区 多语言开心版 - 源码1688 应用介绍 简介: 2024最新流媒体在线音乐系统网站源码| 音乐社区 | 多语言 | 开心版 图片:

delmia机器人运动仿真PPR

创建时PPR时ProductList和ResourceList两个里面用到的产品或资源都必须是Product,才可以加载进来,否则不行。

项目文件预览

在实际项目开发过程,项目使用数据存在多种形式,“文件”也是一种常见形式,因此,“文件预览”功能变成了常规需求。 kkFileView项目使用流行的spring boot搭建,易上手和部署。万能的文件预览开源项目,基本支…