C语言的预处理、编译、连接、运行

1.预处理阶段:

编译器以C文件作为一个单元,首先读这个C文件,发现第一句与第二句是包含一个头文件,就会在所有搜索路径中寻找这两个文件,找到之后,就会将相应头文件中再去处理宏,变量,函数声明,嵌套的头文件包含等,检测依赖关系,进行宏替换,看是否有重复定义与声明的情况发生,最后将那些文件中所有的东东全部扫描进这个当前的C文件中,形成一个中间“C文件”

编译:

编译时是进行语法检查、函数分配空间,将各个函数编译成二进制码,按照特定目标文件格式生成目标文件

连接:

假如一个程序包含多个文件,在分别对每个源程序进行编译并得到多个目标程序后,要把这些目标程序连接起来,同时还要同系统提供的资源(如函数库)连接成为一个整体,如果不出现错误,会得到一个后缀为 .exe的可执行文件

运行:

运行时是执行连接好的程序(具体的没有找到相关资料) 将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然,最后还可以用objcopy生成纯二进制码,也就是去掉了文件格式信息

一般说来编译器会做以下几个过程:

1.预处理阶段

2.词法与语法分析阶段

3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件

4.连接阶段。

发布了131 篇原创文章 · 获赞 44 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_38769551/article/details/105107856