编译器做了什么

一、预编译

1、处理所有注释,以空格代替

2、删除所有#define,并展开所有的宏定义

3、处理条件编译#if,#ifdef,#elif,#else,#endif

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

5、保留编译器需要使用的#pragrama指令

 gcc -E file.c -O file.i 或 gcc -E file.c

二、编译(Compilation):

1、翻译成汇编,对预处理文件进行

词法分析:分析关键字,标示符,立即数是否合法

语法分析:分析表达式是否遵循语法规则

语义分析:分析表达式语义内容

2、分析结束后进行代码优化生产汇编文件

 gcc -S file.c -o file.s

三、汇编(Assembly)

1、将汇编代码转变为机器可执行的指令

 gcc -c file.s -o file.o 

四、链接(Linking)

1、将file.o与C标准输入输出库进行连接,最终生成可执行文件file,可直接在命令行运行./file

   gcc file.o -o file
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容