C语言——二周目——程序的翻译与执行环境

2023-10-22 01:04

本文主要是介绍C语言——二周目——程序的翻译与执行环境,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、程序环境

        对于一个C语言程序的实现,整个过程一般存在两个不同的环境,分别是翻译环境与执行环境。在翻译环境中,我们所写的源代码经过一系列处理被转换成为可执行的机器指令;在执行环境中,会实际执行代码。

        整个程序在这两个环境中处理,由我们所写的.c文件最后变为.exe文件。

        该图便是程序在翻译与运行过程中的流程,每一个源文件通过编译转换为单独的一份目标代码,这些生成的目标文件最后由链接器捆绑在一起,链接器同时引入标准库与个人库内容,从而形成一个单一而完整的可执行程序。

        以下的内容,我们会一一介绍这些流程具体做了哪些事情。 

二、程序的翻译环境

1.编译

1.1预编译(预处理)

        在该过程中,源文件会从 .c文件 变为 .i文件 ,所进行的操作均为文本操作。具体的操作包括:

        ①注释的替换(删除)。在预编译阶段,代码中所写的注释信息会被用一个空格进行替换。

        ②头文件的包含。代码中通过#include所包含的头文件都会被引入,并且在此展开。

        ③#define 符号的替换。该阶段会将定义的常量、宏等进行替换。

1.2编译

        在该过程中,源文件会从 .i文件 变为 .s文件,将c语言代码翻译成为了汇编代码。具体的操作包括:

        ①词法分析;

        ②语法分析;

        ③语义分析;

        ④符号汇总。符号汇总的符号都是是针对全局的。

        在此处会生成语法树来构建整个语句,因其操作偏底层,所以挖个坑,等我们详细了解了编译原理之后再来把这个坑给填平。

1.3汇编

        在该过程中,源文件会从 .s文件 变为 .o文件,将汇编代码翻译成为了二进制的指令,即目标文件。

        在此时会生成符号表,所谓符号表即为编译时所汇总的符号的总和,其记录了符号名与指向的地址。以函数为例,对于在该源文件内声明并且定义的函数,会记录函数名与其地址;而对于只声明未定义的函数,会记录其函数名,地址则为一个随机指向的地址。

2.链接

        在链接的过程中,链接器会链接该项目下所有通过编译所生成的.o目标文件,同时链接链接库生成可执行程序。

        在该过程中会:①合并段表;②符号表的合并与重定义。具体则是将每一个目标文件中的符号表进行合并,相同的符号名会给予一个正确的地址,所以此时如果对于一个函数没有定义只有声明,便会报告链接错误。

三、程序的运行环境

        程序运行必须载入内存中,程序开始执行后调用main函数,然后执行代码直至终止程序。终止程序可能是main函数正常终止,也有可能是意外终止。

这篇关于C语言——二周目——程序的翻译与执行环境的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/258097

相关文章

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

python编写朋克风格的天气查询程序

《python编写朋克风格的天气查询程序》这篇文章主要为大家详细介绍了一个基于Python的桌面应用程序,使用了tkinter库来创建图形用户界面并通过requests库调用Open-MeteoAPI... 目录工具介绍工具使用说明python脚本内容如何运行脚本工具介绍这个天气查询工具是一个基于 Pyt

Ubuntu设置程序开机自启动的操作步骤

《Ubuntu设置程序开机自启动的操作步骤》在部署程序到边缘端时,我们总希望可以通电即启动我们写好的程序,本篇博客用以记录如何在ubuntu开机执行某条命令或者某个可执行程序,需要的朋友可以参考下... 目录1、概述2、图形界面设置3、设置为Systemd服务1、概述测试环境:Ubuntu22.04 带图

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

Python程序打包exe,单文件和多文件方式

《Python程序打包exe,单文件和多文件方式》:本文主要介绍Python程序打包exe,单文件和多文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python 脚本打成exe文件安装Pyinstaller准备一个ico图标打包方式一(适用于文件较少的程

pytest+allure环境搭建+自动化实践过程

《pytest+allure环境搭建+自动化实践过程》:本文主要介绍pytest+allure环境搭建+自动化实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、pytest下载安装1.1、安装pytest1.2、检测是否安装成功二、allure下载安装2.