使用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
进行比较?类型转换实际上会使警告消失,但我没有查看生成的代码来验证它仍然有意义。