编译过程

   from http://hi.baidu.com/badweitm/blog/item/258cfb17245fe54220a4e99b.html

 

 

  为了用C、C++编程,应该了解编译过程的步骤和所需工具。某些语言(特别是C、C++)编译时,首先要对源代码执行预处理。预处理器(preprocessor)是一个简单的程序,它用程序员定义好的模式(预处理指令)代替源代码中的模式。预处理指令用来节省输入,增加代码的可读性。(C++程序设计并不鼓励多使用预处理指令,因为它可能会引起一些不易发现的错误)。预处理过的代码通常存放在一个中间文件中。

       编译一般分两遍进行。首先,对预处理过的代码进行语法分析。编译器把源代码分解成小的单元并把它们按树形结构组织起来。表达式“A+B”中的“A”、“+”、“B”就是语法分析树的叶子节点。

       有时候会在编译的第一遍和第二遍之间使用全局优化器(global optimizer)来生成更短、更快的代码。

        编译的第二遍,由代码生成器(code generator)遍历语法分析树,把树的每个节点转化成汇编语言或机器代码。如果代码生成器生成的是汇编语言,那么还需要汇编器对其汇编。两种情况的最后结果都是生成目标模块(通常是,一个以.o或.obj为扩展名的文件)。有时也会在第二遍中使用窥孔优化器(peephole optimizer)从相邻一段代码中查找冗余汇编语句。

       连接器(linker)把一组目标模块连接成为一个可执行程序,操作系统可以装载和运行它。当某个目标模块中的函数要引用另一目标模块中的函数或变量时,由连接器来处理这些引用;连接器还要添加一个特殊的目标模块来完成程序启动任务。

      连接器能搜索称为“库”的特殊文件来处理它的所有引用。库将一组目标模块包含在一个文件中。库由一个被称为库管理器(librarian)的程序来创建和维护。

      类型检查(type checking)是编译器在第一遍中完成的。类型检查是检查函数参数是否正确使用,以防止许多程序设计错误。由于类型检查是在编译阶段而不是程序运行阶段进行的,所以称之为静态类型检查(dynamic type checking)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值