C语言程序环境

目录

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

        ​翻译环境

        ​运行环境


在我们写完代码时系统是怎么读懂并运行产生结果的呢?

这个过程包含了:编辑、编译、链接等等过程,每个过程都有专门的工具来处理它们(如编辑器、编译器等等)。拿VS2022来举例它是一个集成开发环境(IDE)包含了编辑、编译、链接、调试的功能,这就意味着它包含了编辑器、编译器(cl.exe)、链接器(link.exe)、调试器。

下面我们来详细了解一下:

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

在ANSIC的任何一种实现中,存在两个不同的环境:

        >第1种是翻译环境,在这个环境中源码被转换为可执行的机器指令。

        >第2种是执行环境,它用于实际执行代码。

下面是两种环境相对应功能的模拟图(在翻译环境下要经过编译、汇编、链接的过程):

         翻译环境

        下面我们详细看一看翻译环境:在翻译过程中要经历编译和链接两个过程。

        如下图所示(我们在写代码可能创建多个源文件):

        举个例子:

在编辑代码时,这里创建了两个源文件:test.c和add.c ,下面我们来运行一下:

发现文件中多出来了两个目标文件:add.obj和test.obj。并且生成了执行程序: 程序的环境和预处理.exe。(可以知道该程序已经完成了编译和链接两个过程)

  注:在编辑代码时我们使用了外部头文件函数(printf),链接过程中链接库会提供stdio.h文件中的函数并由链接器链接最后成为可执行文件。

在翻译环境的编译过程在还具体的经历了三个阶段:预编译(预处理)编译汇编:

        >在预编译的阶段主要进行是一些文本操作,如:头文件的包含、注释的删除、#define符号的替换等等。

        >在编译的阶段主要进行的操作是将C语言代码转换成为汇编代码,如:语法分析、词法分析、语义分析、符号汇总。

        >在汇编的阶段主要进行的操作是将汇编指令转换为二进制指令并形成符号表。

在编译过程全部完成后,链接阶段主要进行进行的操作是合并段表以及符号表的合并和重定位。

         运行环境

程序执行的过程:

        1、程序必须载入内存中。在有操作系统的环境中:一般这个由操作系统完成。在独立的环境中,程序的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成。

        2、程序的执行便开始。接着便调用main函数。

        3、开始执行程序代码。这个时候程序将使用一个运行时的堆栈(stack)即函数栈帧,存储函数的局部变量和返回地址。程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程一直保留他们的值。

        4、终止程序。正常终止main函数,也有可能是意外终止。


本博客略微介绍了一下程序环境,下一期将对程序的预处理进行详解。请各位看客不要走开,不见不散~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

1e-12

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

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

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

打赏作者

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

抵扣说明:

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

余额充值