gpt4 book ai didi

C/GCC 警告 - 一次编写并到处测试?

转载 作者:太空宇宙 更新时间:2023-11-04 02:19:45 24 4
gpt4 key购买 nike

我正在用 ANSI C 编写命令行程序来解析 Quake 2 map 文件以报告正在使用的实体和纹理数量。我的开发机器是 MacBook。我正在 OS X Snow Leopard(32 位)、Windows XP(32 位)和 Vista(64 位)以及 Ubuntu 9.10(32 位)上进行测试。

代码在 OS X 和 GCC 4.2 上完美无缺。其他平台,不是那么完美。

Visual Studio 2005 提示 main() block 中间的数组声明——数组的大小信息直到那时才可用——应该在顶部声明。通过在顶部声明一个指针并编写一个函数来创建数组来解决这个问题。

Windows 上的 Dev-C++ 和 GCC (3.4) 没有任何问题。

Windows 上的 Cygwin 和 GCC (4.4) 提示数组下标的类型为 char。我添加了 (int) 强制转换来解决这个问题。

Ubuntu 和 GCC (4.4) 提示忽略 fread 的返回值。尽管我在其他地方读到我可能是 Ubuntu 打包 GCC 的方式中的错误。在我使用 fread 的上下文中似乎可以安全地忽略这个。警告仅与 -O3 标志一起出现。

除 Visual Studio 2005 外,我测试的所有编译器都是某个版本的 GCC。追查所有这些错误和警告是非常痛苦的事情。到目前为止,我一直在我的 Makefile 中使用以下标志:

调试:-pedantic -Wall

释放:-O3

我应该使用一组 GCcflags来捕捉我的主要开发机器上的所有错误吗?或者一次编写到处测试是生活中的一个事实吗?

最佳答案

令人恼火的是,Visual Studio 中的 C 方言(甚至是 Visual Studio 2010 的测试版!)已经过时,并且不支持所有 C99 功能,能够混合声明和可执行语句可能是其中最令人恼火的地方全部。最不坏的选择可能是在此平台上编译为 C++,即使它需要重新安排您的代码以使其同时有效的 C++ 和 C。

除此之外,正如 Ken 的评论所说,“编写一次,到处测试是生活中的事实”。 Lint 可能是一个很好的帮助(正如 Chris 所写),但要找到语法和语义中的所有不兼容性,您确实需要在多个编译器和系统上编译和测试您的程序。这样做实际上有助于发现代码中的错误和问题,即使您不打算在多个系统上实际运行该程序。

关于C/GCC 警告 - 一次编写并到处测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2304793/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com