C/C++中预编译(预处理)、编译、汇编、链接

 C/C++中预编译(预处理)、编译、汇编、链接

C/C++中预编译(预处理)、编译、汇编、链接_第1张图片

一、预编译

读取C/C++源程序,对其中的伪指令(以#开头的指令)进行处理

作用:处理关于 “#” 的指令

1)删除#define,展开所有宏定义。例#define portnumber 3333

2)处理条件预编译 #if, #ifdef, #if, #elif,#endif

3)处理“#include”预编译指令,将包含的“.h”文件插入对应位置。

4)删除所有注释/**/,//。


二、编译

作用:

1.词法分析

2.语法分析

3.语义分析

4.产生相应的汇编代码文件

三、汇编

将编译完的汇编代码文件翻译成机器指令,并生成可重定位目标程序的.o文件,该文件为二进制文件,字节编码是机器指令。

作用:汇编器是将汇编代码转变成可以执行的指令,生成目标文件。


四、链接

通过链接器将一个个目标文件(或许还会有库文件)链接在一起生成一个完整的可执行程序。


由汇编程序生成的目标文件并不能立即就被执行,其中可能还有许多没有解决的问题。

例如:某个源文件中的函数可能引用了另一个源文件中定义的某个符号(如变量或者函数调用等);

      在程序中可能调用了某个库文件中的函数;这些问题,都需要经链接程序的处理才能解决。

    链接程序的主要工作就是将有关的目标文件彼此相连接,也就是将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的这些目标文件成为一个能够被操作系统装入执行的统一整体。

 

大致经过这几个步骤,一个完整的可执行程序产生了……





你可能感兴趣的:(C语言)