【C语言学习记录19】编译过程

本节课研究C语言如何编译语言程序。对编译器的了解程度决定代码的产品质量。

 

file.i 中间代码

file.s 汇编文件

file.o 二进制文件

预编译(文本处理工作)

1)处理所有的注释,用空格代替;

2)将所有的#define删除,并且展开所有的宏定义;

3)处理条件编译命令,#if,#ifdef,#elif,#else,#endif

4)处理#include,展开被包含的文件;

5)保留编译器需要使用的#pragma命令;

预处理指令示例:

gcc –E file.c –o file.i

编译

1)对预处理文件进行词法分析,语法分析和语义分析;

       a> 词法分析:分析关键字,指示符,立即数等是否合法;

       b> 语法分析:分析表达式是否遵循语法原则;

       c> 语义分析:在语法分析的基础上进一步分析表达式是否合法;

  1. 分析结束后进行代码优化生成相应的汇编代码文件;

编译指令示例:

gcc –S file.i –o file.s

汇编(相对编译器工作简单)

1)汇编器将汇编代码转变为机器的可以执行代码;

2)每条汇编语句几乎都对应一条机器指令;

汇编指令示例:

gcc –c file.s –o file.o

小结:

编译过程分为预处理,编译,汇编和链接四个阶段。

1)预处理:处理注释,宏以及#开头的符号;

2)编译:进行词法分析,语法分析和语义分析;

3)汇编:将汇编代码翻译为机器指令的目标文件;

猜你喜欢

转载自blog.csdn.net/haibing_x/article/details/94591367