为什么OpenWatcom会发出:警告! W124:比较结果总是0

时间:2014-04-16 12:12:22

标签: c integer-promotion watcom

使用OpenWatcom,我们(同事和我自己)收到以下警告:

Warning! W124: Comparison result always 0

我们拥有的代码当然是较大项目的一部分,但产生警告的代码片段与此相当:

typedef unsigned __int64 uint64_t; /* typedef'd depends on compiler/platform */
uint64_t x;
/* x gets a value */
if (x > 0xFFFFFFFFU) /* <-- warning */
{
    /* do something */
}

我认为应该将字面值提升为x的整数类型,但显然不是。

是什么给出的?整数提升规则不适用于64位整数吗?

唯一的解决方案是显式转换((x > (uint64_t)0xFFFFFFFFU))还是与0xFFFFFFFFULL进行比较?类型转换实际上会使警告消失,但我没有查看生成的代码来验证它仍然有意义。


注意:

  • 代码不能编译为C99,它使用C89和C99之间的东西(例如包括C ++样式的单行注释)。
  • Watcom和OpenWatcom只是我们的一些团队成员使用的编译器,OpenWatcom是唯一在那里抱怨的编译器。

0 个答案:

没有答案