What does “Comparing constant with boolean expression is always true” warning mean?

前端 未结 3 2012
死守一世寂寞
死守一世寂寞 2020-12-20 01:15

What does this warning mean (i and j are not constants):

I have been trying to Google this but it does not give me any results.

相关标签:
3条回答
  • 2020-12-20 01:35

    The other answers have already explained the core problem. You can use:

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

    to resolve your problem.

    My recommendation will be to wrap that logic in a function.

    int isInRange(int x, int lower, int upper)
    {
       return (lower <= x && x <= upper);
    }
    

    and use

    if ( isInRange(i, 0, 10) && isInRange(j, 0, 10) )
    
    0 讨论(0)
  • 2020-12-20 01:39

    In C, chaining of relational operators like this are not valid design. Thus,

     (0<=i<=10)
    

    is not doing what you think it should be doing. it is getting evaluated as

    ((0<=i) <= 10 )
    

    which is basically either

    • 0 < = 10, producing 1 (considered TRUE value)
    • 1 < = 10, also producing 1 (considered TRUE value)

    sadly, both of which are way out than the expected path.

    Solution: you need to break down your condtion check like

     (0 <= i) && ( i<=10)
    
    0 讨论(0)
  • 2020-12-20 01:54

    I believe you need to understand what's going on in your statement at a deeper level.

    0<=i is a boolean expression, it will become true or false. The result of that expression is then compared with 10.

    So you end up with true <= 10 or false <= 10.

    I think you meant to write

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

    You cannot connect clauses together the way you did.

    0 讨论(0)
提交回复
热议问题