乐趣区

关于c:C进阶19编译过程简介

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 语言进阶课程》。
如有错漏之处,恳请斧正。

退出移动版