发张照片

悉尼华轩剧社福利, 为每个演员都照张特写。很久没照相了,我正好来一张。

华轩印象

明天去签Nokia E63

下决心了,希望顺利

《An Introduction to GCC》翻译工作1

今天开始了我的《An Introduction to GCC》翻译工作,心情极度舒畅,哈哈。

  1. 介绍

这本书的目的是解释如何使用GUN C C++ 译器,命令行是gccg++.读完这本书你应该理解怎么编译一个程序, 并且知道怎么使用基本的编译器选项进行优化和调试。这本书并不会教授如何C语言和C++语言,相关的内容有很多(请参考第91)。熟悉其他编译系统但是对于GUN系统陌生的有经验的程序员可以跳过前面几章,例如“编译一个C 程序”, “使用预处理器”和“编译一个C++程序”。 剩下的章节会向你们讲解GCC的大体特性。

    1. GCC简史

GNU C编译器(GCC)的作者是Richard StallmanGNU项目的奠基者。

GNU项目始于1984年,目的是生成一个类似Unix操作系统的一个免费软件,以此增加计算机使用者和程序员之间的自由度和合作。每一个类UNIX操作系统都需要一个C编译器, 不过那时候没有免费的编译器,所以GNU项目需要从头开发。这项工作的到了一个非盈利性组织Free software Foundation的个人以及公司的赞助和支持。

GCC的第一个版本发布于1987年。这是一个重大的突破,因为它是第一个支持ANSI C可移植的免费编译器。从那时候开始GCC变成一个极为重要的免费开发工具。

1992年,GCC 2.0系列发布, 这是一个重要的修正,因为它开始支持编译C++1997年, 一个编译器测试分支诞生,叫做EGCS,以增强优化和支持C++。紧接着,EGCS变成GCC开发的一个新主线,并且这些特性被广泛的应用于2001年发布的GCC3.0版本。

逐渐的,GCC被增加了扩展以支持更多语言, 包括FortranADAJAVAObjective-C。如今GCC已经是“GNU Complier Collection”的代名词,其发展由一个叫做GCC Steering Committee的由GCC社区内工业,研究和教育的代表组成的组织来主持。

    1. GCC的主要特性

这部分主要讲解GCC的一些最重要的特性。

首先,GCC是一个可移植的编译器, 他可以在很多平台上运行,并且为不同种类的处理器生成输出。不单单是个人电脑的处理器, 还支持微处理器,例如DSP64CPU

GCC不仅是一个本地编译器, 它支持交叉编译任何程序,可以在一个系统上面为不同的系统产生可执行文件。这样的一个好处就是可以为嵌入式系统编译软件, 因为嵌入式系统无法运行一个编译器。GCCC编写,非常注重可移植性,所以它不但可以编译自己, 还易于用于新系统。

GCC有许多语言的前端,用于分析不同语言。任何语言编写的程序都可以为了不同体系结构而编译或者交叉编译。比如一个ADA程序可以编译后用于微处理器,或者一个C程序被编译后用于超级计算机。

GCC是模块化设计,可以增加对新语言和系统结构的支持。如果有正确的运行时文件(例如库文件)

那么增加一个编程语言的前端文件给GCCGCC就可以在任何系统结构上使用这种语言。同样,增加一个对新系统结构的支持,那么也可以使用编程语言于这个新系统里。

最后, 也就是最重要的, GCC是免费软件,按照GUN GPL协议分发。这就意味着你可以自由使用和修改GCC,就像GUN其他的软件一样。 如果你需要对一种新的CPU的支持,或者新的语言或者特性的支持, 你可以自己增加到GCC里面, 或者雇别人来增强你的GCC。如果GCC对你的工作有一个很重要的错误的话, 你也可以雇别人来修复这个错误。

更多的是, 你可以自有分享你对GCC的增强特性。当然你也可以自由使用其他人对GCC的增强性修改。GCC让所有使用它的人在工作中得益于其自由特性。

    1. CC++编程

CC++是允许直接存取计算机内存的语言。历史上曾经使用它们编写低级系统软件,或者一些设计高性能和系统资源控制的重要应用。 但是,正确存取计算机内存需要特别小心, 还要避免破坏系统数据结构。这本书将描述一些检测编译过程中的潜在错误的技巧, 但是使用像CC++这样的编程语言所带来的风险从来不会少。

除了CC++, GNU项目还高级语言,例如GNU Common LispGCL),GNU SmalltalkGST),GNU策略扩展语言(GUILE)和GNUJAVA编译器(GCJ)。这些语言不允许用户直接存取计算机内存,从而减少了内存存取错误的几率。在实际应用中,它们相比于CC++, 更加安全。

    1. 本手册使用惯例

这本手册包含了许多例子,终端输入的命令行象这样:

$ Command

后面跟着其输出结果。例如:

$ echo “hello world”

hello world

在终端出现的第一个符号是终端提示符,不需要键盘打出来。很多系统是用别的符号, 但是本手册里面的标准提示符是$.

当一个命令太长难以在一行里面显示出来时,会折到下一行显示。例如:

$ echo “an example of a line which is too long to fit

in this manual”

当用键盘输入时, 整个命令需要被输入到一行里面。

本手册所有的例子代码文件都可以从出版商的网站(http://www.network-theory.Co.uk/gCC/intro/)下载到,或者可以手工在文本编辑器里面输入,例如标准GNU编辑器,emacs. 例子中的编译命令用gccg++表示GNU CC++ 的编译器名字,CC指向了别的编译器。所有举例程序都能用于所有版本的GCC。任何近支持新版本GCC的命令行选项会标记出来。

我们假定所有例子都运行于一个GNU的操作系统--实际上在别的操作系统上差别不大。有一些不重要或者冗余的系统依赖的输出信息(例如非常长的系统路径)会在例子中简化。设定环境变量的命令使用标准GNU bash的语法,并且可以工作于任何bash的版本。