c语言里面的编译和链接是怎么回事?

Python012

c语言里面的编译和链接是怎么回事?,第1张

C/C++语言的完整编译过程是

一、预编译

处理#define #if #include这类#开头的语句,这些称为预编译指令。这个过程中会把.h文件和.c/.cpp文件组合成最终交给compile过程的原文件。这个原文件是不包含任何#开头的语句的。所有#define定义的宏也会被替换。

二、编译

把上面那个原文件编译成.o或者VC里是.obj文件。这个文件保存了机器码化的函数、函数的描述、全局变量的描述、乃至段的描述等等。

三、连接

把可执行程序需要的所有的编译过程产生的.o或者.obj文件组合到一起。(这里也包括.lib文件,.lib文件件本质上就是打包的.obj文件集合)。另外连接过程还会组合一些其他数据,比如资源、可执行文件头等等。

编辑就是对代码的编写,按照c语言规则,编写完成一定功能的代码。

编译就是对代码进行编译,让代码从高级语言编译成可以让电脑识别运算的机器码。

连接就是对代码各个函数等进行,连接

运行就是运行所编辑代码组成的程序。

1

编辑:

就是写代码或修改代码,制作C语言的源文件和头文件。

2

编译:是由编译程序将C语言源文件转换成二进制中间文件,在这一步中,会对文件内部的语法语义做处理,如果编译出错,无法进行后续动作。

3

链接:将2中生成的中间文件组合成二进制可执行文件,这一步会对文件之间的关联做检查,如果出错,将不会生成可执行文件,也就无法执行。

4

执行:

运行可执行文件,这一步是编写代码的最终目的。

以上四步每步均依赖于上一步,这是一个逐步由高级语言(C语言)到机器语言(可执行文件)转化的过程。广义的编译,包含编译链接两个部分。