“将常量与布尔表达式进行比较始终为真”警告意味着什么?
这个警告意味着什么( i
和j
不是常量):
我一直试图谷歌这个,但它没有给我任何结果。
警告:常量10与布尔表达式的比较始终为真[-Wututological-constant-out-of-range-compare]
if ((0<=i<=10)&&(0<=j<=10)){
在我的程序中, i
和j
不是常数值,它们确实会发生变化。
在C
,像这样的关系运算符的链接不是有效的设计。 从而,
(0<=i<=10)
没有做你认为它应该做的事情。 它被评估为
((0<=i) <= 10 )
这基本上都是
-
0 < = 10
,产生1
(被认为是真值) -
1 < = 10
,也产生1
(被认为是真值)
遗憾的是,两者都远远超出了预期的路径。
解决方案:你需要打破你的条件检查
(0 <= i) && ( i<=10)
其他答案已经解释了核心问题。 您可以使用:
if ( ( ( 0 <= i) && (i <= 10)) && ( ( 0 <= i) && (i <= 10)) )
解决你的问题。
我的建议是将该逻辑包装在一个函数中。
int isInRange(int x, int lower, int upper) { return (lower <= x && x <= upper); }
并使用
if ( isInRange(i, 0, 10) && isInRange(j, 0, 10) )
我相信你需要在更深层次上理解你的陈述中发生的事情。
0<=i
是一个布尔表达式,它将变为true或false。 然后将该表达式的结果与10进行比较。
所以你最终得到true <= 10
或false <= 10
。
我想你打算写
if ( ( 0 <= i ) && ( i <= 10 ) )
您无法以您的方式将子句连接在一起。