Summary

1)编译器个别由以下4局部组成:预处理器、编译器、汇编器、链接器

2)点击Build之后,IDE会进行预编译(生成两头.i文件)、编译(生成汇编代码.s文件)、汇编(生成指标文件.o文件)、链接(生成可执行程序.out文件)。

3)预编译会做的事件:解决正文(应用空格代替);开展宏(删除'#define');解决#结尾的符号(包含解决条件编译指令开展头文件#pragma指令等)

4)编译器所做工作

  • 对预处理.i文件进行词法剖析、语法分析、语义剖析

    • 词法剖析:剖析关键字、标识符、立刻数等是否非法
    • 语法分析:剖析表达式是否恪守语法规定
    • 语义剖析:在语法分析的根底上进一步剖析表达式是否非法
  • 剖析完结后进行代码优化生成相应的汇编代码文件

5)汇编器所做工作

  • 汇编代码转变为机器的可执行指令
  • 每条汇编语句简直都对应一条机器指令

编译过程简介

1、预编译

预编译做的是文本处理工作:

  • 正文用空格代替
  • 开展所有的宏定义,并将#define删除
  • 解决条件编译指令#if, #ifdef, #elif, #else, #endif
  • 解决#include,开展被蕴含的头文件
  • 保留编译器须要应用的#pragma指令

预处理指令示例:gcc - E test.c -o test.i

2、编译

编译器所做工作

  • 对预处理.i文件进行词法剖析、语法分析、语义剖析

    • 词法剖析:剖析关键字、标识符、立刻数等是否非法
    • 语法分析:剖析表达式是否恪守语法规定
    • 语义剖析:在语法分析的根底上进一步剖析表达式是否非法
  • 剖析完结后进行代码优化生成相应的汇编代码文件

编译指令示例:gcc -S test.i -o test.s

3、汇编

汇编器所做工作

  • 汇编代码转变为机器的可执行指令
  • 每条汇编语句简直都对应一条机器指令

汇编指令示例:gcc -c test.s -o test.o(.o文件被称为指标文件,并不是最终的可执行程序;个别一个.c文件就对应到一个.o指标文件

本文总结自“狄泰软件学院”唐佐林老师《C语言进阶课程》。
如有错漏之处,恳请斧正。