编译器做了什么

一、预编译

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

推荐阅读更多精彩内容

  • 原地址:https://objccn.io/issue-6-2/ ,https://objccn.io/issue...
    TByounger阅读 4,751评论 0 3
  • 词法分析 语法分析 语义分析 中间语言生成 目标代码生成与优化 其中包括六个步骤:1. 扫描 2. 语法分析 3....
    Sendom阅读 4,088评论 0 0
  • 编译: 1).预处理阶段:宏定义替换,条件编译处理,头文件包含 2).编译,优化阶段: 3).汇编: 链接: 汇编...
    yshi2017阅读 3,418评论 0 0
  • 链接地址:https://www.tutorialspoint.com/compiler_design/compi...
    dannyvi阅读 10,214评论 1 12
  • Swift介绍 Swift是一种高性能的语言,拥有整洁现代的语法。swift可以和C、OC的代码和框架无缝衔接,并...
    sea_biscute阅读 11,418评论 2 22