从源程序到可执行程序

刚开始学c语言时,我想很多人都会好奇一件事吧,那就是:我们用vc或者vs写的后缀为.c的源文件怎么变成后缀为.exe的可执行程序。

今天学到了点这方面相关的内容,所以来分享一下,如果有错误之处,麻烦帮我改正。

在ANSI C的任何一种实现里都分为:翻译环境和运行环境,两个不同的环境;

翻译环境是在环境中源代码转化成可执行的机器指令;执行环境则是实际执行代码。

 

在翻译环境可以分为两大阶段:编译和链接; 通过编译可以生成目标文件,目标文件和标准C函数库中所用到的函数通过链接器链接生成可执行程序。

以gcc编译器为例:

编译:编译可以分为预处理器处理,编译,汇编三个过程。

1.  预处理器处理,在这一阶段,主要是一些文本操作,包括头文件的包含,注释的删除,define定义的标识符替换级宏替换,形成一个后缀为.i的文件。

2.  编译,包括语法分析,词法分析,语义分析,符号汇总。形成汇编代码。文件后缀为.s

从源程序到可执行程序_第1张图片

3.  汇编,形成符号表,将汇编代码转换成二进制指令,存储到test.o的目标文件里。


目标文件test.o是一个二进制文件

链接:包括合并段表,符号表的合并和符号表的重定位,把多个目标文件和库文件链接生成可执行程序。

 

运行环境,即程序执行的过程:

1.      程序必须载入内存中,一般由操作系统完成。

2.      程序的执行开始,调用main函数。

3.      开始执行程序代码,程序使用一个运行时堆栈,存储函数的局部变量和返回地址,同时程序也会使用静态内存,存储于静态内存中的变量在程序的执行过程中会一直保留。

4.      终止程序。

你可能感兴趣的:(c语言)