刨析c语言的程序环境

Jiawen_captial Jiawen_captial     2022-12-03     445

关键词:

C语言程序运行的环境

1、程序的翻译环境和执行环境

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

第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。第2种是执行环境,它用于实际执行代码。见下图:

在翻译环境又可分为编译和链接,在编译过程中又分为:预编译、编译、汇编过程,下面让我们来详细看一下编译+链接过程。

2、详解编译+链接

编译过程

我们将翻译环境分为两个小的过程,编译(依赖编译器,VS下的编译器为cl.exe)和链接(依赖链接器,VS下为link.exe),其中编译又分为预编译、编译、汇编。见下图:

链接过程

每一个源文件都会单独的经过编译器的处理,生成所对应的目标文件,最终通过链接器,把多个目标文件和链接库(包含库函数等)连接在一起,生成我们想要的可执行程序。见下图:

翻译过程详解

以下面代码最终如何关联运行起来的为例来讲:

代码大致要经过预编译、编译、汇编、链接到可执行程序,下面我们来详细刨析每一步的细节:

1、预编译:.c文件->.i文件。 进行的都是文本操作,对文本的删除、替换:1)完成头文件的包含2)预处理指令的处理,如#define的替换等。3)删除注释

2、编译:.i文件->.s文件。把C语言代码转换为汇编代码,在这个过程中要经过:1)语法分析: 2)词法分析 3)语义分析 4)符号汇总:汇总的都是全局的符号,将上面代码左侧的Add,右侧的Add、mian进行汇总。

3、汇编:.s文件->.o文件。把汇编代码转换成二进制指令(机器指令)。在这个过程中完成了:形成符号表

4、链接:1)合并段表:.o的二进制文件elf的格式来组织文件 2)符号表的合并和重定位:舍弃没有实际地址的函数

3、 运行环境

程序执行的过程:

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

详细刨析c语言数据的储存(代码片段)

C语言数据的存储1、数据类型的详细介绍2、类型的基本归类3、整形在内存中的存储4、大小端介绍5、浮点型在内存中的存储1、数据类型的详细介绍我们在C语言中已经学到了许多基本的内置数据类型,下面让我们来看看。char/... 查看详情

详细刨析c语言数据的储存(代码片段)

C语言数据的存储1、数据类型的详细介绍2、类型的基本归类3、整形在内存中的存储4、大小端介绍5、浮点型在内存中的存储1、数据类型的详细介绍我们在C语言中已经学到了许多基本的内置数据类型,下面让我们来看看。char/... 查看详情

c语言函数栈帧的创建和销毁,以简单函数的调用来进行详细刨析(代码片段)

...的;函数是怎么进行传参的等等,下面让我们来刨析一下其中的奥秘。2、了解计算机中的寄存器寄存器是植入在CPU中的一些小型存储区域,用来暂时存放参与运算的数据和运算结果,其运算速度极高,常见的... 查看详情

c语言程序的翻译环境和执行环境

查看详情

c语言——程序环境和预处理

程序的翻译环境和执行环境编译+链接预处理一.程序的翻译环境和执行环境在ANSIC标准的任何一种实现中,存在两种不同的环境:翻译环境:该环境中源代码会被转换为可执行的机器指令 执行环境:其用于实际执行代码二.编... 查看详情

微信小程序测试点详细刨析

微信小程序测试点详细刨析小程序(MiniProgram),是一种不需要下载安装即可使用的应用,是内嵌在微信APP里面的一款新形态软件。它实现了应用“触手可及”的梦想,用户扫一扫或者搜一搜即可打开应用,也体现了“用完即走”... 查看详情

c语言的第02课:c语言的开发环境

...成能够执行的程序,总是要预备点什么的。通常来说,C语言系统应该由3个部分构成,分别是:程序的开发环境、C语言和C语言的库。程序的开发环境计算机本身是一个数据的输入及输出的设备。编程这一动作,同样是一个数据... 查看详情

c语言学习笔记(19)程序环境和预处理(代码片段)

文章目录程序的翻译环境和执行环境翻译环境(编译+链接)预处理编译汇编运行环境预处理预定义符号#define#define定义标识符#define定义宏#define替换规则#和##带副作用的宏参数宏和函数的对比#undef命令行定义条件编译... 查看详情

linux环境下c编程指南的内容简介

...Linux环境下C编程指南(第2版)》系统地介绍在Linux平台下用C语言进行程序开发的过程,通过列举大量的程序实例,使读者能够很快掌握在Linux平台下进行C程序开发的方法和技巧,并具备开发大型应用程序的能力。《Linux环境下C编程... 查看详情

c语言进阶六.预处理

 (1)程序的翻译环境和执行环境在ANSIC的任何一种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。包含编译加链接第2种是执行环境,它用于实际执行代码。(2)详解编译... 查看详情

c语言篇——程序的编译(代码片段)

今天我来补一下C语言篇的程序的编译的一篇文章,也算是有一个结尾了。目录程序的翻译环境和执行环境编译和链接翻译环境编译的几个阶段预处理编译汇编链接运行环境程序的翻译环境和执行环境在ANSIC的任何一种实现中&... 查看详情

c语言篇——程序的编译(代码片段)

今天我来补一下C语言篇的程序的编译的一篇文章,也算是有一个结尾了。目录程序的翻译环境和执行环境编译和链接翻译环境编译的几个阶段预处理编译汇编链接运行环境程序的翻译环境和执行环境在ANSIC的任何一种实现中&... 查看详情

c语言预处理和程序环境

目录程序的环境运行环境 翻译环境编译的过程 预编译阶段编译阶段 汇编阶段 链接阶段(不属于编译阶段)预处理详解预定义符号 #define#define定义标识符#define定义宏#define的替换规则 #和##的使用 带副作用的宏参数 ... 查看详情

c程序设计实验报告

实验项目:C语言程序设计教程实验1.3.2;1.3.3;1.3.4;2.3.1;2.3.2姓名:陈思杰???实验地点:home???实验时间:2020.02.25—————————————————————————————————————————————————... 查看详情

如何在 Windows 上为 C++ 程序设置正确的初始语言环境?

】如何在Windows上为C++程序设置正确的初始语言环境?【英文标题】:howdoIsettheproperinitiallocaleforaC++programonWindows?【发布时间】:2009-02-2021:47:55【问题描述】:我对本地化编程相当陌生,我正在尝试弄清楚如何为新启动的非托管C++... 查看详情

vb语言和c语言有啥区别?

一、主体不同1、vb语言:是Microsoft公司开发的一种通用的基于对象的程序设计语言。2、c语言:是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。二、特点不同1、vb语言:结构化的、模块化的、面向对象的... 查看详情

c语言进阶学习笔记——程序环境和预处理(代码片段)

目录程序的翻译环境和执行环境详解编译+链接翻译环境运行环境预处理详解预定义符号#define#define定义标识符#define定义宏#define替换规则#和##带副作用的宏参数宏和函数宏和函数的对比命名约定#undef命令行定义条件编译文件包... 查看详情

初学c语言用啥系统好?

初学C语言用Windows和macOS都可以。Windows系统安装C语言编程环境普通电脑安装的都是Windows,现在一般的系统都是Win7和Win10。使用Win7,可以安装比较经典的VC6.0,这里之前用的最多的C和C++编程环境,许多高校还在用,编译、连接程... 查看详情