C语言程序翻译环境详解

【C语言重点】程序的翻译环境和执行环境详解 程序的翻译环境和执行环境的深度剖析 阅读详情

前言

一个源文件想要变成可执行程序要经过两个过程:1.编译 2.链接。这两个过程都是在翻译环境下进行的。今天的主题是带大家了解翻译环境中的执行的具体操作。
在这里插入图片描述

一、编译

后续操作作将在Linux环境下演示。

1.预编译(预处理)

在这里插入图片描述
在Linux下创建一个test.c的文件。

预处理 选项 gcc -E test.c -o test.i
预处理完成之后就停下来,预处理之后产生的结果都放在test.i文件中。
在这里插入图片描述
打开test.i文件
在这里插入图片描述
这里我们会发现原来只有几行代码的test.c经过预处理生成的test.i文件内容居然有800多行之多。
我们不妨对比下test.c 与 test.i的内容
在这里插入图片描述
细心的小伙伴不难发现test.c中的<stdio.h> 和注释在经历过预处理在test.i中消失不见了,
其中<stdio.h>是在test.i中展开,所以导致其内容变的很多。
总结: 1.头文件的包含 2.注释被删除 3.#define符号的替换(上述没有演示,读者可自行实践)

2.编译

编译 选项 gcc -S test.c
编译完成之后就停下来,结果保存在test.s中。
打开test.s
在这里插入图片描述
test.s中全是汇编代码
总结: 编译过程中把C语言代码转变成汇编代码,详细过程1.语法分析2. 词法分析3.语义分析4.符号汇总

3.汇编

汇编 gcc -c test.c
汇编完成之后就停下来,结果保存在test.o中。
打开test.o
在这里插入图片描述
what!,很多读者看到这里或许和我一样吃惊,其实这都是二进制机器指令
总结: 形成符号表。

二、链接

创建add.c文件进行上述类似操作
在这里插入图片描述
生成add.o文件(目标文件,windows中后缀为.obj)
在这里插入图片描述
执行gcc test.o add.o 将两个目标文件进行链接生成可执行程序a.out
在这里插入图片描述
执行a.out
在这里插入图片描述
成功打印数字5。

1.符号汇总

符号汇总出现在编译时期,就是将具有全局性质的符号进行汇总,如:上述test.c中的main , Add.

2.符号表

在这里插入图片描述
符号表作用就是对全局数据如Add 进行重定位。这也是为什么两个不同文件中不声明函数也能够运行的原因。
总结: 1.合并段表 2.重定位

总结

感谢大家的观看,如有错误望指出!

【C语言】《词典翻译》小程序: 【C语言】《词典翻译》小程序: * 1.创建结构体存储单词和翻译 * 2.读取单词,格式化存储对应的对空间中 * 3.单词查找 * 4.销毁堆空间 立即下载

相关推荐

C语言实现简单翻译功能

本文实例为大家分享了C语言实现翻译功能的具体代码,供大家参考,具体内容如下 题目描述:编写一个程序,依次输入英文与汉语拼音,输入两个“ * ”表示输入结束,再输入一段英语句子,打印出其对应汉语拼音。 要求:不得使用头文件 题目中要求不得使用提醒我们使用其中的函数来编写代码,不过函数的实现需要自己来思考,根据自己的需要可以调整原函数的功能。思路大致是:输入完毕后拿原结构体记录的英文内容与 a 中的单词逐个相比,若相同,则输出结构体中对应的汉语拼音。 #include #include #define M 100

【C语言】程序的翻译环境和执行环境

每个源程序也就是.c(可以是多个源程序)文件实际上都会经过编译器的处理,最后在各自生成一个目标文件.obj。 然后,这些目标文件一起就会生成一个叫做链接器的东西。在链接器进行链接的时候还会生成一个名为链接库的东西,把链接库连接到连接器当中去。最后在生成一个名为可执行文件(.exe)。 那么在这里介绍下什么是链接器和链接库如下↓ 🎄链接器🎄→链接器(Linker)是一个程序,将一个或多个由编译器或汇编器生成的目标文件外加库链接为一个可执行文件。

"謓泽"正在路上朝着"攻城狮"方向"前进四"! 3273

AI量化交易工作台Vibe-Trading:用自然语言驱动策略回测与多智能体研究

量化交易通过数学模型和计算机程序执行投资决策,其核心在于将市场规律转化为可验证的策略。传统量化开发涉及数据获取、策略编写、回测验证等复杂工程,对非编程背景的从业者构成较高门槛。随着大语言模型技术的发展,自然语言交互正成为降低技术使用难度的关键。Vibe-Trading项目正是这一趋势的实践,它将金融工程任务封装为可调用的工具与技能,允许用户通过自然语言指令直接驱动策略回测、因子研究和投资组合分析。其技术价值在于构建了一个模块化的AI Agent框架,通过ReAct推理框架协调多个专项技能,并创新性地引入多智

weixin_28695161的博客 1567

c语言 英汉词典

英译汉词典具有英译汉、汉译英 、查看单词、 删除单词、增加单词功能

weixin_66397563的博客 7665

残差检验_第三十讲 R语言-Cox比例风险模型的假设检验条件

在介绍完 Cox比例风险模型的详细理论和R实现以后(插入链接!!!),我们已经知道Cox比例风险模型可以较好的同时矫正多个混杂因素对结果的影响,同时我们遗留下来了一个问题:Cox比例风险模型的假设检验条件是什么?这一讲,我们将对此进行解答。请注意,如果使用不当,统计模型可能会产生误导性的结论。因此,检查给定的模型是否适合数据类型是非常重要的!1. Cox比例风险模型的假设条件Cox比例风险模型的成...

weixin_35476698的博客 8048

告别反复刷写:用英飞凌XCP Overlay功能实现ECU标定与诊断的‘热更新’

本文详细介绍了英飞凌XCP Overlay功能在ECU标定与诊断中的应用,实现参数的'热更新',避免反复刷写Flash。通过地址重映射技术,将标定变量从Flash重定向到RAM,显著提升工作效率并保护Flash寿命。文章涵盖技术原理、工程实践、功能安全考量及高级应用场景,为汽车电子工程师提供完整解决方案。

weixin_30689307的博客 532

【C语言进阶】程序的翻译、执行

目录 1. 程序的翻译环境和运行环境 2. 程序编译、链接过程 3. 翻译环境 3.1 编译过程 3.1.1 预编译(预处理) 3.1.2编译 3.1.3汇编 3.2链接过程 3.2.1 合并段表 3.1.2 符号表的合并和重定位 4. 运行环境 1. 程序的翻译环境和运行环境 .c 文件是源文件或者源程序 但是在电脑中运行的文件都是 .exe 可执行文件 所以 .c的源文件需要经过 编译+链接 变成 .exe可执行文件 .c 文本文件------翻译环境--...

Henry的博客 1335

基于立创·天猛星MSPM0G3507的简易PID电机控制入门项目实战

本文详细介绍了基于立创·天猛星MSPM0G3507开发板的简易PID电机控制入门项目实战。从硬件选型、电路设计、PCB布局,到软件编程中的编码器读取、PID算法实现与调参,手把手教你完成一个带屏幕显示的电机定速与定距控制项目,是学习嵌入式开发和经典PID控制算法的绝佳实践。

weixin_42596011的博客 510

C语言程序的翻译过程

加油

Gzmy的博客 1万+

循环神经网络(RNN)

在之前学习了全连接神经网络(DNN)模型,网络结构都是从输入层到隐含层再到输出层,层与层之间是全连接或部分连接的,但每层之间的节点是无连接的。 一、神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只要训练数据足够,给定特定的x,就能得到希望的y,结构图如下: 将神经网络模型训练好之后,在输入层给定一个x,通过网络之后就能够在输出层得到特定的y,那么既然有了这么强大的模型,为什么还需要RNN(循环神经网络)呢? 二、为什么需要RNN(循环神经网络) 考虑这样一个问题,如果要预测句子的下一个单词是什么

小朱小朱绝不认输的博客 2万+

Python 复现AlexNet框架代码

【代码】Python 复现AlexNet框架代码。

Quintin 2421

用c语言写一个实现英汉翻译的程序dm

{“banana”, “香蕉”},{“orange”, “橙子”},{“apple”, “苹果”},// 定义单词和翻译的结构体。{“dog”, “狗”},{“cat”, “猫”}

qq_32257509的博客 486

[关系图谱] 二.Gephi导入共线矩阵构建作者关系图谱

本文主要讲解Gephi绘制作者间的关系图谱,该软件可以广泛应用于社交网络、知识图谱分析,推荐读者使用。这是非常基础的一篇文章,重点讲解Gephi使用方法,希望对大家有所帮助。

杨秀璋的专栏 1万+

C语言程序的生命周期:从源码到执行——翻译环境与运行环境详解

将源代码转换为可执行文件的过程。:执行可执行文件并与其操作系统交互的过程。

2501_90200491的博客 2199

BDD测试用例:Playwright的MCP Server实战

Playwright MCP Server建立了大模型和真实的浏览环境之间的桥梁,可以让大模型操作多款浏览器完成测试任务。

Criss@陈磊 453

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C语言程序环境和预处理Pt.1 - 预处理指令|预处理操作符

_FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义。

BuiderCodes的博客 1232

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C语言程序环境和预处理详解

第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。第2种是执行环境,它用于实际执行代码。在ANSIC的任何一种实现中,存在两个不同的环境。

hy____123的博客 2276

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C语言进阶——7程序的编译(预处理操作)+链接

_FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义这些预定义符号都是语言内置的。int main()//VS2022不支持return 0;语法:1000register//为 register这个关键字,创建一个简短的名字for;;//用更形象的符号来替换一种实现break;case。

graceyun的博客 1410

速通C语言第十三站 预处理

万字长文拿捏预处理!

qq_73329472的博客 2220

程序的编译(预处理操作)+链接 详解(C语言)

语法:#define name(名字) stuff(内容)#define reg register // 为 register这个关键字,创建一个简短的名字;) // 用更形象的符号来替换一种实现case // 在写case语句的时候自动把 break写上。// 一种奇葩的写法// 注:如果定义的 stuff过长,可以分成几行写,除了最后一行外,每行的后面都加一个反斜杠(续行符)。注:在预处理阶段,这些符号都会被直接替换。注:#define定义标识符的时候,最后面不要加上;

kk6kk的博客 1071

c语言进阶-第7节-程序环境和预处理

1. 程序的翻译环境和执行环境 在ANSI C(遵循美国国家标准总局定义的c语言标准的c语言)的任何一种实现中,存在两个不同的环境。 第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令 第2种是执行环境,它用于实际执行代码 test.c里面存的是c语言的源代码 test.exe是二进制文件,里面存的是二进制指令/机器指令(机器能够读懂的是二进制,二进制指令是机器能够读懂的,因此也叫机器指令) 翻译环境就是将test.c中的c语言的源代码翻译成test.exe中机器能够读懂的二进

qq_45113223的博客 1453

C语言 零基础帮你快速了解《程序开发中的编译和链接》——内附预编译的详细讲解

本博客将深入探讨编译和链接的原理和过程,以及一些常见的错误和解决方法。通过对编译的深入理解,我们可以更好地优化我们的代码并避免一些潜在的问题,从而提高软件开发的效率和质量。

m0_74951730的博客 1940

程序环境及预处理

程序执行的过程:1. 程序必须载入内存中。在有操作系统的环境中:一般这个由操作系统完成。在独立的环境中,程序的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成。2. 程序的执行便开始。接着便调用main函数。3. 开始执行程序代码。这个时候程序将使用一个运行时堆栈(stack)(函数栈帧),存储函数的局部变量和返回地址。程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程一直保留他们的值。4. 终止程序。正常终止main函数;也有可能是意外终止。

eixjdj的博客 1326

程序环境和预处理

例:语法: #define name stuff#define reg register //为 register这个关键字,创建一个简短的名字;) //用更形象的符号来替换一种实现case //在写case语句的时候自动把 break写上。// 如果定义的 stuff过长,可以分成几行写,除了最后一行外,每行的后面都加一个反斜杠(续行符)。在define定义标识符的时候,要不要在最后加上;//遇上以下情况容易出现问题max = MAX;

weixin_70564024的博客 227

【C语言进阶】第七节:程序环境和预处理√

_FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义这些预定义符号都是语言内置的。#define reg register//为register这个关键字,创建一个简短的名字不要在最后加分号,容易导致问题,例如:max = MAX;分号书写:当定义的内容较长时,可以通过反斜杠 \ 进行续行。

Lumos_yyyx的博客 987
上一篇: 浮点数与0比较
下一篇: 联合体Union详解
1无名之辈1
博客等级 码龄5年 4674粉丝 46原创
评论 18
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1无名之辈1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值