Compound condition in C: if (0.0 < a < 1.0)

后端 未结 4 2053
忘掉有多难
忘掉有多难 2020-12-04 02:31

I recently noticed that the following expression compiles in my compiler (Clang):

float a;
if (0.0 < a < 1.0) { ... }

Does this do wh

4条回答
  •  抹茶落季
    2020-12-04 03:07

    Because of left-to-right associativity of < operator the expression condition (0.0 < a < 1.0) means ((0.0 < a) < 1.0) == 1 < 1.0 or 0 < 1.0 depending on value of a.

    So no, its not identical to if (0.0 < a && a < 1.0) (perhaps you might confusing from Python compassion rule) but in C it will be interpenetrated as I explained above.

    A difference you can observe in an example --- 0.0 < a < 1.0 == true when a == 0.0, where as (0.0 < a && a < 1.0) == false, for a == 0.0, below is my code (read comments):

    #include
    void print_(int c){
        c ? printf("True \n"):
            printf("False \n");
    }
    int main(void){
        float a = 0.0f;
        print_(0.0f < a < 1.0f); // 0.0 < 0.0 < 1.0f == 0 < 1.0f == True
        print_(0.0f < a && a < 1.0f); // 0.0f < 0.0f && ... ==  False && ... = False
        return 0;
    }
    

    output:

    True 
    False
    

    Check its working @Ideone

提交回复
热议问题