编译和链接说明

来源:互联网 发布:淘宝网良品铺子 编辑:程序博客网 时间:2024/04/29 07:41

image

编译器的工作不单单只有编译,事实上,它包括了从高级语言到机器语言的完整过程: 
预编译-》编译-》汇编-》链接。

  1. 预编译 
    预编译过程主要是处理源代码文件中以#开始的预编译指令。主要处理规则如下: 
    1.1.将所有#define删除,并展开所有的宏定义。 
    1.2.处理所有条件编译指令,比如#ifdef、#else等。 
    1.3.处理#include,递归的将被包含的文件出入到该指令的位置。 
    1.4.删除所有注释。 
    1.5.添加行号和文件名标识,以便于编译器调试产生的行号消息和警告时显示的行号。 
    1.6.保留所有#pragma编译指令。#pragma指令是编译器参数。经过预编译之后,产生一个*.i文件。
  2. 编译 
    编译过程就是把预处理完成的*.i文件进行词法分析、语法分析、语义分析以及优化之后,产生相应的汇编代码文件。 
    2.1.词法分析利用扫描器和有限状态机算法,将源代码字符按照特定的字符标识分割成一系列记号。这些记号包含了以下几种分类:关键字、标识符、字面量(包括数字、字符串等)和特殊符号(加减乘除等)。 
    2.2.语法分析产生表达式语法树,但是不排查这个语句是否合法。 
    2.3.语义分析给语法树添加类型标识,并检查表达式是否合法。 
    2.4.中间代码生成。 
    2.5.目标代码生成和优化经过编译之后,产生一个汇编输出文件*.s文件。
  3. 汇编 
    汇编过程就是将汇编代码转变成机器代码文件*.o文件。这是个相对简单的过程,根据汇编指令和机器指令对照一一翻译就可以了。
  4. 链接 
    连接器将多个*.o文件彼此关联拼接到一起,最终产生一个可执行文件。分为静态链接和动态链接。
原创粉丝点击