【C语言】C程序编译过程详解

C代码通过编译器编译成可执行代码,经历了四个阶段,依次为:预处理、编译、汇编、链接。 

【C语言】C程序编译过程详解_第1张图片

一、预处理 

 任务:1、删除注释;2、宏替换;3、展开include

具体处理如下:

  • 将所有的#define删除,并且展开所有的宏定义
  • 处理所有的条件预编译指令,比如#if #ifdef #elif #else #endif等
  • 处理#include 预编译指令,将被包含的文件插入到该预编译指令的位置。
  • 删除所有注释 “//”和”/* */”.
  • 添加行号和文件标识,以便编译时产生调试用的行号及编译错误警告行号。
  • 保留所有的#pragma编译器指令,因为编译器需要使用它们

二、编译

任务:把预处理完的文件进行一系列的词法分析,语法分析,语义分析及优化后生成相应的汇编代码。(查错)

三、汇编

任务:将汇编文件生成目标文件(2进制文件)(翻译)计算机可以识别的代码。

四、链接

任务:找到依赖的库文件,将目标文件链接为可执行程序。

链接分为静态链接和动态链接。

静态链接是指在编译阶段直接把静态库加入到可执行文件中去,这样可执行文件会比较大。

动态链接则是指链接阶段仅仅只加入一些描述信息,而程序执行时再从系统中把相应动态库加载到内存中去。

你可能感兴趣的:(【C语言】C程序编译过程详解)