我正在用 ANSI C 编写一个命令行程序来解析 Quake 2 地图文件,以报告正在使用多少实体和纹理。我的开发机器是 MacBook。我正在 OS X Snow Leopard(32 位)、Windows XP(32 位)和 Vista(64 位)以及 Ubuntu 9.10(32 位)上进行测试。
该代码在 OS X 和 GCC 4.2 上完美无缺。其他平台,也不是那么完美。
Visual Studio 2005 抱怨 main() 块中间有一个数组声明——数组的大小信息直到那时才可用——应该在顶部声明。通过在顶部声明一个指针并编写一个函数来创建数组来解决这个问题。
Windows 上的 Dev-C++ 和 GCC (3.4) 没有任何抱怨。
Windows 上的 Cygwin 和 GCC (4.4) 抱怨数组下标具有 char 类型。我添加了 (int) 强制转换来解决这个问题。
Ubuntu 和 GCC (4.4) 抱怨忽略 fread 的返回值。尽管我在其他地方读到过,我可能是 Ubuntu 打包 GCC 方式中的一个错误。在我使用 fread in 的上下文中,这似乎是可以安全忽略的。该警告仅与 -O3 标志一起出现。
除了 Visual Studio 2005,我测试的所有编译器都是 GCC 的某个版本。追查所有这些错误和警告是一件非常痛苦的事情。到目前为止,我一直在 Makefile 中使用以下标志:
调试:-pedantic -Wall
释放:-O3
我应该使用一组 GCC 标志来捕获我的主要开发机器上的所有错误吗?还是一次编写,到处测试是生活中的事实?