1.程序所经历的环境
一个程序的运行要经历两个环境,一是翻译环境,在这个环境中,源代码通过编译被转换为机器指令(二进制代码)进而通过链接生成.exe程序,二是执行环境,这个环境用于执行实际代码
2.翻译环境
大体流程如下图
一个程序有多个源文件,也就是.c文件,每一个源文件通过编译器转换为目标代码,生成目标文件,也就是.o文件,生成的多个目标文件通过链接器链接到一起,并且链接器还会搜索标准C函数库和程序员个人函数库,将需要的函数一并与目标文件链接起来,最后生成可执行程序,也就是.exe文件
2.1 编译
编译分为三个阶段,一是预编译,二是编译,三是汇编
预编译:程序进行与预处理相关指令,对.c文件处理,生成.i文件
在这个阶段中,程序会进行一系列文本操作,1、头文件的包含,你用来包含头文件的代码也就#include<>的一行,但实际上,程序运行时会把这个头文件所包含的代码通通替换进来 ,2、注释的删除,在程序运行时,所以的注释都会被删除,3、#define 定义的符号替换,所有被#define定义的符号都会被完全的替换
编译:程序将C语言代码转换为汇编代码,对.i文件处理生成.s文件
在这个阶段中,程序会进行四种操作,1.语法分析,2.词法分析,3.语义分析,4.符号汇总
汇编:将汇编代码转换为二进制代码,对.s文件处理生成.o文件
在这个阶段中,程序会形成符号表
2.2链接
在链接中,程序会进行两种操作,1.合并段表,2.符号表的合并和符号表的重定位
3.执行环境
程序的执行过程:
1.程序载入内存中
2.开始调用main函数,执行程序代码,程序使用运行时堆栈存储函数的局部变量和返回地址。
3.终止main函数