Compound condition in C: if (0.0 < a < 1.0)
c, conditional-statements, expression, if-statement
Solution
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<stdio.h>
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
Problem
I recently noticed that the following expression compiles in my compiler (Clang): ``` float a; if (0.0 < a < 1.0) { ... } ``` Does this do what I expect? I would expect that it evaluates identically to this condition: ``` if (0.0 < a && a < 1.0) { ... } ``` If it is so, since when and with which other compilers it is possible to write conditions in this short form?