“将常量与布尔表达式进行比较始终为真”警告意味着什么?

这个警告意味着什么( ij不是常量):

我一直试图谷歌这个,但它没有给我任何结果。

警告:常量10与布尔表达式的比较始终为真[-Wututological-constant-out-of-range-compare]

  if ((0<=i<=10)&&(0<=j<=10)){ 

在我的程序中, ij不是常数值,它们确实会发生变化。

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 <= 10false <= 10

我想你打算写

 if ( ( 0 <= i ) && ( i <= 10 ) ) 

您无法以您的方式将子句连接在一起。