在Linux系统终端利用ggc,大学计算机:Linux下C编程.pdf

第 1 章 编译与调试

1.1 编译的概念和理解

在进行 C 程序开发时,编译就是将编写的 C 语言代码变成可执行程序的过程,这一过程

是由编译器来完成的。编译器就是完成程序编译工作的软件,在进行程序编译时完成了一系

列复杂的过程。

1.1.1 程序编译的过程

在执行这一操作时,程序完成了复杂的过程。一个程序的编译,需要完成词法分析、语

法分析、中间代码生成、代码优化、目标代码生成。本章将讲解这些步骤的作用与原理。

(1)词法分析。指的是对由字符组成的单词进行处理,从左至右逐个字符地对源程序进

行扫描,产生一个个的单词符号。然后把字符串的源程序改造成为单词符号串的中间程序。

在编译程序时,这一过程是自动完成的。编译程序会对代码的每一个单词进行检查。如果单

词发生错误,编译过程就会停止并显示错误。这时需要对程序中的错误进行修改。

(2 )语法分析。语法分析器以单词符号作为输入,分析单词符号串是否形成符合语法规

则的语句。例如,需要检查表达式、赋值、循环等结构是否完整和符合使用规则。在语法分

析时,会分析出程序中错误的语句,并显示出结果。如果语法发生错误,编译任务是不能完

成的。

(3 )中间代码生成。中间代码是源程序的一种内部表示,或称中间语言。程序进行词法

分析和语法分析以后,将程序转换成中间代码。这一转换的作用是使程序的结构更加简单和

规范。中间代码生成操作是一个中间过程,与用户是无关的。

(4 )代码优化。代码优化是指对程序进行多种等价变换,使得从变换后的程序能生成更

有效的目标代码。用户可以在编译程序时设置代码优化的参数,可以针对不同的环境和设置

进行优化。

(5 )目标代码生成。目标代码生成指的是产生可以执行的应用程序,这是编译的最后一

个步骤。生成的程序是二进制的机器语言,用户只能运行这个程序,而不能打开这个文件查

看程序的代码。

1.1.2 编译器

所谓编译器,是将编写出的程序代码转换成计算机可以运行的程序的软件。在进行 C 程

序开发时,编写出的代码是源程序的代码,是不能直接运行的。需要用编译器编译成可以运

行的二进制程序。

第5 章 编译与调试

在不同的操作系统下面有不同的编译器。C 程序是可以跨平台运行的。但并不是说

Windows 系统下 C 语言编写的程序可以直接在 Linux 下面运行。Windows 下面 C 语言编写的

程序,被编译成 exe 文件。这样的程序只能在 Windows 系统下运行。如果需要在 Linux 系统

下运行,需要将这个程序的源代码在 Linux 系统重新编译。不同的操作系统下面有不同的编

译器。Linux 系统下面编译生成的程序是不能在 Windows 系统上运行的。

1.2 gcc 编译器

gcc 是 Linux 下的 C 程序编译器,具有非常强大的程序编译功能。在 Linux 系统下,C 语

言编写的程序代码一般需要通过 gcc 来编译成可执行程序。

1.2.1 gcc 编译器简介

Linux 系统下的 gcc 编译器(GNU C Compiler )是一个功能强大、性能优越的编译器。gcc

支持多种平台的编译,是 Linux 系统自由软件的代表作品。gcc 本来只是 C 编译器的,但是后

来发展为可在多种硬体平台上编译出可执行程序的超级编译器。各种硬件平台对 gcc 的支持

使得其执行效率与一般的编译器相比平均效率要高 20%~30% 。gcc 编译器能将 C、C++源程

序、汇程语言和目标程序进行编译链接成可执行文件。通过支持 make 工具,gcc 可以实施项

目管理和批量编译。

经过多年的发展,gcc 已经发生了很大的变化。gcc 已经不仅仅能支持C 语言,还支持 Ada

语言、C++语言、Java 语言、Objective C 语言、Pascal 语言、COBOL 语言等更多的语言集的编

译。gcc 几乎支持所有的硬件平台,使得 gcc 对于特定的平台可以编译出更高效的机器码。

gcc 在编译一个程序时,一般需要完成预处理(preprocessing )、编译(compilation )、汇

编(assembly )和链接(linking )过程。使用gcc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值