C 是所有版本的UNIX上的系统语言.
C 在过去的二十年中有了很大的发展. 在80年代末期美国国家标准协会(American National
Standards Institute)发布了一个被称为 ANSI C 的 C 语言标准.这更加保证了将来在不同
平台上的 C 的一致性. 在80年代还出现了一种 C 的面向对象的扩展称为 C++.
Linux 上可用的 C 编译器是 GNU C 编译器, 它建立在自由软件基金会的编程许可证的基础
上, 因此可以自由发布. 你能在 Linux 的发行光盘上找到它.
随 Slackware Linux 发行的 GNU C 编译器(GCC)是一个全功能的 ANSI C 兼容编译器. 如果你
熟悉其他操作系统或硬件平台上的一种 C 编译器, 你将能很快地掌握 GCC. 这和java在命令行下
编译也很类似我们将在下面介绍如何使用 GCC 和一些 GCC 编译器最常用的选项.
格式 gcc [option] [sourcefilename]
gcc的选项十分繁多,大约有上百中,不过平时常用的不是非常多,我们将要介绍一些常用的选项:
最简单的是:gcc hello.c
默认的情况下将生成a.out的可执行性文件,你只需要在终端上输入./a.out就可以看到执行的结果.
如果你想指定生成目标文件的名字那么你可以加上 -o选项,命令如下:
gcc -o hello hello.c
gcc也允许你只编译源程序,这样可以只检查编译时刻的错误,有利也调试程序,用-c选项可以达到这个目的
命令如下:
gcc -c hello hello.c
结果生成了一个中间代码hello.o文件
编译选项告诉 GCC 在为 C 代码产生了汇编语言文件后停止编译. GCC 产生的汇编语言文
件的缺省扩展名是 .s . -E 选项指示编译器仅对输入文件进行预处理. 当这个选项被使用时
, 预处理器的输出被送到标准输出而不是储存在文件里.
之后你可以对上述中间代码进行链接运行,使用命令:
gcc -o hello.out hello.c
优 化 选 项
当你用 GCC 编译 C 代码时, 它会试着用最少的时间完成编译并且使编译后的代码易于调试
. 易于调试意味着编译后的代码与源代码有同样的执行次序, 编译后的代码没有经过优化.
有很多选项可用于告诉 GCC 在耗费更多编译时间和牺牲易调试性的基础上产生更小更快的可
执行文件. 这些选项中最典型的是-O 和 -O2 选项.
-O 选项告诉 GCC 对源代码进行基本优化. 这些优化在大多数情况下都会使程序执行的更快
. -O2 选项告诉 GCC 产生尽可能小和尽可能快的代码. -O2 选项将使编译的速度比使用 -O
时慢. 但通常产生的代码执行速度会更快.
GCC 支持数种调试和剖析选项. 在这些选项里你会最常用到的是 -g 和 -pg 选项.
选项告诉 GCC 产生能被 GNU 调试器使用的调试信息以便调试你的程序. GCC 提供了一个
很多其他 C 编译器里没有的特性, 在 GCC 里你能使 -g 和 -O (产生优化代码)联用. 这一
点非常有用因为你能在与最终产品尽可能相近的情况下调试你的代码. 在你同时使用这两个
选项时你必须清楚你所写的某些代码已经在优化时被 GCC 作了改动. 关于调试 C 程序的更
多信息请看下一节"用 gdb 调试 C 程序" .
如下命令 gcc -c -g hello.c
pg 选项告诉 GCC 在你的程序里加入额外的代码, 执行时, 产生 gprof 用的剖析信息以显
示你的程序的耗时情况.
关于ggc的详细信息可用man gcc来查看