1. 首页
  2. 技术
  3. 后台

c语言编译原理

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

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

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

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

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

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

原创文章,作者:脑海飞鱼的博客,如若转载,请注明出处:https://www.zengqueling.com/c%e8%af%ad%e8%a8%80%e7%bc%96%e8%af%91%e5%8e%9f%e7%90%86/

联系我们

15602395067

在线咨询:点击这里给我发消息

邮件:eden7@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code