【发布时间】:2011-01-16 23:02:53
【问题描述】:
每当我使用 Visual C++ 9 编译 SQLite 时,我都会收到数百条警告,例如
- 可能未初始化的变量
- 从更宽的整数类型到更窄的整数类型的转换
- 有符号/无符号整数不匹配。
我并不孤单 - 有一个 SQLite FAQ question 专门针对此问题。该问题的答案表明
- SQLite 开发人员使用的 GCC 中不会出现这些警告
- 警告不是问题,因为团队对代码进行了彻底的测试
我当然不能反对这些观点,但是......
- 我不使用 GCC - 我使用 VC++,而 VC++ 确实显示警告
- 他们测试了使用 GCC 编译的代码,而我不使用 GCC,因此可能存在一些实现定义的差异,或者 GCC 和 VC++ 之间的 C 标准遵从性不同级别,这会巧妙地破坏代码并造成严重后果。
这就是为什么我不喜欢简单地忽略所有警告的想法。
那么我该如何处理 VC++ 在编译 SQLite 时显示的警告呢?
【问题讨论】:
-
“巧妙地破坏代码并造成严重后果” - SQLite 测试套件是否编译并运行?仍然不能证明相同的行为,因为差异可能会破坏代码和相应的测试,但这是一个很好的指标。
-
您收到什么警告?我刚刚尝试使用 /W4 并得到了几个应该可以安全忽略的 C4127(查看一些代码部分)和一个关于将 int 转换为“2 字节无符号整数”的 C4244。我会说你必须相信 SQLite 开发人员与后者......所以忽略警告。
标签: c++ c sqlite visual-c++ compiler-construction