我有一个小的样本函数:
#define VALUE 0
int test(unsigned char x) {
if (x>=VALUE)
return 0;
else
return 1;
}
我的编译器警告我比较语句(x>=VALUE)在所有情况下都为真,这是正确的,因为x是一个无符号字符,而VALUE被定义为值0。所以我修改了我的代码:
if ( ((signed int) x ) >= ((signed int) VALUE ))
但是警告又出现了。我用了三个GCC版本进行测试(所有版本>4.0,有时需要启用-Wextra)。
在这种情况下,我有一个显式的转换,应该是有符号整数比较。为什么它声称比较总是为真?
if constexpr
或类似的东西。但是 gcc 对警告非常敏感。 :-/ 我可能会对 gcc 提交一个错误报告,因为确实应该有一些方法可以在不使用预处理器的情况下明确您的意图。 - Omnifarious