anintroductiontogcc中文

上传人:第*** 文档编号:61700183 上传时间:2018-12-10 格式:PDF 页数:66 大小:797.10KB
返回 下载 相关 举报
anintroductiontogcc中文_第1页
第1页 / 共66页
anintroductiontogcc中文_第2页
第2页 / 共66页
anintroductiontogcc中文_第3页
第3页 / 共66页
anintroductiontogcc中文_第4页
第4页 / 共66页
anintroductiontogcc中文_第5页
第5页 / 共66页
点击查看更多>>
资源描述

《anintroductiontogcc中文》由会员分享,可在线阅读,更多相关《anintroductiontogcc中文(66页珍藏版)》请在金锄头文库上搜索。

1、1 An Introduction to GCC 中文版 GCC 编程简介编程简介 for the GNU Compilers gcc and g+ 作者:Brian Gough 译者:Walter Zhou 作序:Richard M. Stallman 2 An Introduction to GCC 中文版 序言 序言 本序言由热心的 Richard M. Stallman 贡献,他是 GCC 的原始作者和 GNU 项目的奠基者。 本序言由热心的 Richard M. Stallman 贡献,他是 GCC 的原始作者和 GNU 项目的奠基者。 本书是 GCC(GNU Compiler Co

2、llection, GNU 编译器集合)的入门教程, 它将教会你怎样使用 GCC 这个编程工具。是的,GCC 是个编程工具,但它不仅止此。对计算机用户而言,它也是 20 年自 由运动的一部分。 我们都想要好的软件,但对软件而言“好”意味着什么呢?简便的特征和可靠性是技术意义上的 “好” ,但这是不够的。好的软件必须在道德伦理上也是好的:它必须尊重用户的自由。 作为一个软件用户, 你有权按你认为合适的方式运行它, 有权研究源代码并按你认为合适的方式 进行修改, 有权发行软件的拷贝给其他人, 有权公布修改版本以便贡献给建立中的自由软件社区。 当一个程序用这种方式尊重你的自由时,我们称其为自由软件。

3、在 GCC 出现以前,已经有了另 外的 C,Fortran,Ada 等编译器,但它们都不是自由软件。你不能够自由地使用它们。我编写 GCC,以便我无需放弃我的自由就可以使用编译器。 仅仅有编译器对使用计算机系统而言是不够的,你需要整个操作系统。在 1983 年时,现代计算 机的所有操作系统都不是自由的。为了有所补救,我于 1984 年开始开发 GNU 操作系统,一个 属于自由软件的类 Unix 系统。开发 GCC 只是开发 GNU 项目的一部分。 到 90 年代早期,接近完成的 GNU 操作系统由于 Linux 内核的加入而完整了。Linux 是在 1992 年 成为自由软件的。GNU/Lin

4、ux 组合而成的操作系统使得达成这样一个目标成为可能:自由地使 用计算机。 但自由从来不会自动地保护你, 我们需要工作来保卫它。 自由软件运动需要你的支持。 Richard M. Stallman Richard M. Stallman 2004 年 2 月 3 An Introduction to GCC 中文版 介绍 介绍 本书的目的是介绍GNU C和C+编译器(gcc和g+)的用法。阅读了本书后,你应该能学会怎 样编译一个程序和怎样使用用于优化和调试的基本编译器选项。本书不会教你C或C+语言本 身,因为这样的资料在许多地方都能找到(参见【进一步阅读】 ) 。 熟悉其他系统但初次接触GNU

5、编译器的有经验的程序员可以略过本章的前面部分 【编译C程序】 , 【预处理】 , 【编译C+程序】 。本章剩下的部分和其它章节应该能够为已经知道怎样使用其他编 译器的程序员提供一个GCC特征的较好的概貌。 GCC 简史简史 GNU C 编译器(GCC)的原作者是 Richard Stallman,也是 GNU 项目的奠基者。 GNU 项目开始于 1984 年,为了提升自由和计算机用户与程序员间的合作,意图创建一个作为自 由软件的完整的类 Unix 操作系统。 每个类 Unix 操作系统都有 C 编译器, 而当时还没有自由编译 器存在,GNU 项目不得不白手起家开发一个。开发工作由来自个人和公司

6、给予自由软件组织 (Free Software Foundation)的捐献资助,该组织是一个非营利的机构,是为支持 GNU 项目的工 作而建立的。 GCC 的第一版发行于 1987 年。作为以自由软件方式发行的第一个可移植的符合 ANSI C 标准的 优化的编译器,这是一次重大突破。自此以后,GCC 就成为自由软件开发领域最重要的工具之 一。 GCC 编译器的一个主要修订版是 1992 年的 2.0 系列版本,它加入了编译 C+的能力。1997 年, GCC 编译器的的一个实验性分支(EGCS)被传建,以改善优化和对 C+的支持。随着这些工作的 进展,EGCS 被采纳为 GCC 开发版本的新

7、主线,这些特征也在 2001 年的 GCC 3.0 发行版中被广 泛采用。 随着时间的流逝,GCC被扩展以支持更多的语言,包括有Fortran,ADA,Java和Object-C。GCC 这个缩略语现在是指“GNU Compiler Collection”1。它的开发由GCC指导委员会(GCC Steering Committe)管理。这是一个由业界的GCC用户社区,研究机构和学术界代表组成的组织。 GCC 主要特征主要特征 本节介绍一些 GCC 中的最重要的特性。 首先, GCC 是一个可移植的编译器-它能在今天绝大部分平台上运行, 能为许多类型的 CPU 提 供输出。除了在个人计算机方面用

8、到的处理器外,它也支持微控制器,DSP,和 64 位 CPU。 GCC 不仅仅是个本地编译器-它还能够跨平台编译程序,即为不同于 GCC 本身所运行的系统 生成可执行文件。这就可以为不能运行编译器的嵌入式系统编译软件。GCC 是用非常专注于可 移植性的 C 语言写成的,它能对自身进行编译,所以它很容易被移植到新系统上。 GCC 有多种语言前端,用于解析不同的语言。对不同 CPU 架构不同语言的程序都能编译或跨平 台编译。例如,为微控制器编译 ADA 程序,或者为超级计算机编译 C 程序。 GCC 是按模块化设计的,可以加入对新语言和新 CPU 架构的支持。给 GCC 加入新语言的前端 1 在以

9、前是指“GNU C Compiler”(译者注) 4 An Introduction to GCC 中文版 就能使在新的架构上使用该语言,只要提供必需的运行期环境(比如库) 。类似的,加入新架构 的支持也使得所有语言同样支持该架构。 最后,也是最重要的,GCC 是自由软件,在 GNU General Public License(GNU GPL)保护下发行。 这意味着你享有使用和修改 GCC 的自由,就像其他所有 GNU 软件一样。如果你需要支持一种 新的 CPU,一种新语言,或一种新的特性,你可以自己添加它,或雇人来为你增强 GCC。如果 GCC 对你的工作很重要,你也可以雇人修补 bug。

10、 此外,你有分享你增强的 GCC 功能的自由。这种自由的结果是你也能够利用因其它人开发而对 GCC 增强的功能。今天 GCC 提供的许多特性显示了这种自由是怎样使得协作以利于你和使用 GCC 的每一个人的。 C 和和 C+编程编程 C 和 C+是两种允许直接访问计算机的内存的语言。历史上,它们被用于编写底层的系统软件 和高性能的或控制资源很关键的应用程序。然而,需要特别当心以确保内存的正确访问,避免破 坏其他数据结构。 本书介绍的技巧有助于你在编译期间检测出潜在的错误, 当然这种风险在使用 象 C 或 C+这类语言时是不可避免的。 除了 C 和 C+,GNU 项目还提供了其他高级语言,比如象

11、GNU Common Lisp(gcl),GNU Smalltalk(gst),GNU Scheme 扩展语言(guile)和 GNU 的 Java 编译器(gcj) 。这些语言不允许用 户直接访问内存, 避免了内存访问错误的可能性。 对许多应用程序而言, 它们是一种比 C 和 C+ 安全的选择。 本手册的排版约定本手册的排版约定 本书包含许多你可以通过键盘输入的例子。在终端上键入的命令象下面那样显示: $ command 跟着的是输出。例如: $ echo “hello world” hello world 命令行上的第一个字符是终端提示符,不应当输入。美元符号“$”在本书中是标准提示符,而

12、 一些系统可能用其他符号。 如果例子中一行太长而不能放入单独一行上,则会折行并在下一行缩进,象这样: $ echo “an example of a line which is too long to fit in this manual“ 当在键盘上输入时,整行命令应当在一行上输入。 本书中用到的例子源代码文件可以从出版方的网站2下载,或者用任何文本编辑器手工输入,比 如象标准的GNU编辑器,emacs。例子的编译命令用的是GNU C和C+的编译器gcc和g+,而cc 指的是另外的编译器。例子程序应该可以在任何版本的GCC下编译。任何只有在最近的版本的 GCC上才支持的命令行选项将在文中注明

13、。 例子假设使用的是 GNU 操作系统-其他系统上的输出可能有稍许差异。 例子中一些无关紧要的 和冗长的与系统相关的输出信息(比如非常长的系统路径)会被删减。设置环境变量的命令用的 是标准 GNU shell(bash)的语法,在任何版本的 Bourne shell 上应该也能工作。 2 见http:/work-theory.co.uk/gcc/intro/ 5 An Introduction to GCC 中文版 编译 C 程序 编译 C 程序 本章介绍了怎样用 gcc 来编译 C 程序。程序可以编译自单个源文件或多个源文件,还可以用到系 统的库文件和头文件。 编译是指把一个是纯文本的源代码

14、的“程序” ,比如 C 或 C+这种编程语言,转变成机器码,即 用于控制计算机的中央处理单元(CPU)的 1 和 0 的序列。这种机器码被存放在称为可执行文件 的文件中,有时候也被称为二进制文件。 编译一个简单的编译一个简单的 C 程序程序 Hello World 是 C 语言中的经典例子。下面是我们版本的该程序的源代码: #include int main (void) printf (“Hello, world!n“); return 0; 我们假设源代码被存放在“hello.c”的文件中。用 gcc 编译“hello.c”文件,可以用下面的命令: $ gcc Wall hello.c o

15、 hello 这样就把在“hello.c”中的源代码编译成机器码并存储在可执行文件“hello”中。用“-o”选项 可以指定存储机器码的输出文件,该选项通常是命令行上的最后一个参数。如果省略它,输出将 被写到默认文件“a.out”中。 要注意的是,如果同名的可执行文件在当前目录下已经存在,则会被覆盖。 “-Wall”选项打开所有最常用到的编译警告-推荐你总是使用该选项推荐你总是使用该选项!在后面的章节中我们将 讨论许多另外的警告选项,但“-Wall”是最重要的。除非你打开使能这些选项,否则 GCC 输出 任何警告。在用 C 和 C+编程时,编译器警告对检查错误是一种有用的帮助。 由于上面的例子

16、程序是完全合法的,在这种情况下,即使带了“-Wall”选项编译器也不会输出 任何警告。编译时不输出任何警告的源代码被称为“干净地编译” 。 要运行该程序,象下面那样输入该可执行文件的路径名即可: $ ./hello Hello, world! 这会把可执行文件载入内存,CPU 开始执行包含其中的指令。路径中的./是指当前目录,所 以./hello 载入并运行当前目录中的可执行文件“hello” 。 在简单程序中找到错误在简单程序中找到错误 象上面提到的,使用 C 和 C+编程时,编译器警告是非常有用的帮助。为了演示这一点,下面 的程序包含一个细微的错误: 它不正确地调用 printf 函数, 为一个整数指定的是浮点格式的 “%f” : #include 6 An Introduction to GCC 中文版 int main (void) printf (“Two plus two is %fn“, 4); return 0; 这个错误在看第一眼时不太明显,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号