常浪费时间的。假设项目中有 100 个源文件需要编译,并且每个源文件中都包
含 10000 行代码,如果像上面那样仅用一条 GCC 命令来完成编译工作,那么
GCC 需要将每个源文件都重新编译一遍,然后再全部连接起来。很显然,这样
浪费 的时间相当多,尤其是当用户只是修改了其中某一个文件的时候,完全没
有必要将每个文件都重新编译一遍,因为很多已经生成的目标文件是不会改变
的。要解决这 个问题,关键是要灵活运用 GCC,同时还要借助像 Make 这样
的工具。
警告提示功能
GCC 包含完整的出错检查和警告提示功能,它们可以帮助 Linux 程序员写出更
加专业和优美的代码。先来读读清单 2 所示的程序,这段代码写得很糟糕,仔
细检查一下不难挑出很多毛病:
◆main 函数的返回值被声明为 void,但实际上应该是 int;
◆使用了 GNU 语法扩展,即使用 long long 来声明 64 位整数,不符
合 ANSI/ISO C 语言标准;
◆main 函数在终止前没有调用 return 语句。
清单 2:illcode.c
#include <stdio.h>
void main(void)
{
long long int var = 1;
printf("It is not standard C code!\n");
}
下面来看看 GCC 是如何帮助程序员来发现这些错误的。当 GCC 在编译不符合
ANSI/ISO C 语言标准的源代码时,如果加上了-pedantic 选项,那么使用了扩
展语法的地方将产生相应的警告信息:
# gcc -pedantic illcode.c -o illcode illcode.c: In function `main':
illcode.c:9: ISO C89 does not support `long long' illcode.c:8: return
type of `main' is not `int'
需要注意的是,-pedantic 编译选项并不能保证被编译程序与 ANSI/ISO C 标
准的完全兼容,它仅仅只能用来帮助 Linux 程序员离这个目标越来越近。或者
换句话说,-pedantic 选项能够帮助程序员发现一些不符合 ANSI/ISO C 标准
的代码,但不是全部,事实上只有 ANSI/ISO C 语言标准中要求进行编译器诊
断的那些情况,才有可能被 GCC 发现并提出警告。