C语言运行过程

来源:互联网 发布:linux web控制面板 编辑:程序博客网 时间:2024/06/05 07:28
如何正确编写C语言头文件和与之相关联的C源程序文件,这
首先就要了解它们的各自功能。 要理解C文件与头文件(即.h )有什么
不同之处,首先需要弄明白编译器的工作过程。
一般说来编译器会做以下几个过程:
1.预处理阶段
2. 编译阶段,首先编译成纯汇编语句,再将之汇编成跟   CPU   相关的二进
制码,生成各个目标文件   (.obj   文件)
3. 连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特
定平台相关的可执行文件。
编译器在编译时是以  C  文件为单位进行的,也就是说如果你的项目
中一个    C  文件都没有,那么你的项目将无法编译,连接器是以目标文件
为单位,它将一个或多个目标文件进行函数与变量的重定位,生成最终
的可执行文件 。
为了生成一个最终的可执行文件,就需要一些目标文件,也就是首先
要有  C  文件,而这些  C  文件中又需要一个 main ()   函数作为可执行程序
的入口,那么我们就从 从这一个  C  文件入手,引入头文件概念。 
假定这个  C  文件内容如下:
#include  <stdio.h>
#include  "mytest.h"
int  main(int  argc,char **argv)
{
test  =  25;
printf("test ...........  %d\n",test);
}
头文件"mytest.h"包含如下内容:
int  test;
现在以这个例子来讲解编译器的工作:
1.预处理阶段:编译器以   C   文件作为一个单元,首先读这个  C   文件,发
现第一句与第二句是包含一个头文件,就会在所有搜索路径中寻找这两
个文件,找到之后,就会将相应头文件中 的宏,变量,函数声明,嵌套
的头文件包含等,进行 依赖关系 检测,并 进行宏替换,看是否有重复 声
明与定义的情况发生,最后将那些文件中所有的东东全部扫描进这个当
前的 C  文件中,形成一个中间"C   文件"
2.编译阶段,在上一步中相当于将第二 个头文件中的 test  变量扫描进了一
个中间 C  文件,那么  test   变量就变成了这个文件中的一个全局变量,此
时就将所有这个中间    C  文件的所有变量,函数分配空间,将各个函数编
译成二进制码,按照特定目标文件格式生成目标文件,在这种格式的目
标文件中进行各个全局变量,函数的符号描述,将这些二进制码按照一
定的标准组织成一个目标文件
3.连接阶段,将上一步成生的各个目标文件,根据一些参数,连接生成最
终的可执行文件,主要的工作就是重定位各个目标文件的函数,变量等,
相当于将个目标文件中的二进制码按一定的规范合到一个文件中。
0 0
原创粉丝点击