c语言编译原理

c语言 | 2020-03-06 22:39:25 | 阅读 564 次 | 评论(0)

预处理:c语言主要有两种文件 .c 和 .h 文件,#include和#define都是预处理,主要包括宏定义 文件包含 条件编译(eg:用于中英文版本使用一套源码的情况跟if else的区别就是可以是代码的精简if else中的两部分代码都会进行编译,而条件编译是不符合条件就不会进行编译)三种,编译器看见的文件都是预处理之后的样子。比如进行过宏定义之后,预处理就是将宏进行替换然后给编译器进行识别,头文件还可以插入到源代码中。

编译:对象是单个的头文件和其中递归包含的头文件组成的编译单元。一般来说头文件不直接参与编译。c语言编译的时候在windows系统下将生成  .obj 文件,在unix系统中将生成 .o文件

同时会进行语法的检查,词法分析,产生目标代码并进行优化,为全局变量和局部变量分配内存,并检查函数是否定义,如果没有定义会检查函数是否声明,若有函数声明则就告诉编译器函数的定义将晚些定义或者在其他文件中进行定义,你先给我编译通过。

链接:是将编译生成的零散的二进制机器代码组合成可以执行的文件,一是解析其他文件中的函数引用或其他引用,二是解析库函数。

函数必须先声明再引用,如果不定义函数的话 能编译但是不能进行链接,连接错误的原因就是不能找到函数实体。

原因举例:例如1.c文件中声明并且调用了一个函数,这个函数却在2.c中进行的定义,链接就是在2.c中找到函数并对其进行解析,若是找不到就会进行错误提示:存在尚未解析的对象,声明的外部变量也是这样。

文章评论,共0条
游客请输入验证码
文章归档
阅读排行
最新评论