C语言程序环境

目录

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

        ​翻译环境

        ​运行环境


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

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

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

C语言程序环境_第1张图片 程序的翻译环境和执行环境

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

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

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

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

        C语言程序环境_第2张图片 翻译环境

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

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

C语言程序环境_第3张图片

        C语言程序环境_第4张图片举个例子:

C语言程序环境_第5张图片

C语言程序环境_第6张图片

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

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

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

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

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

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

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

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

        C语言程序环境_第9张图片 运行环境

程序执行的过程:

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

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

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

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


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

你可能感兴趣的:(C语言专栏,c语言)