As per C precedence tables, the ternary conditional operator has right-to-left associativity.
So, is it directly convertible to the equivalent if-else ladder?
Your assumption is correct; however, it is often wise to add in parentheses for readability, e.g.:
x ? ( y ? z : u ) : v
The example you gave could only be interpreted in one way (like the if statements you gave), whether the ternary operator had right-to-left or left-to-right associativity.
Where the right-to-left associativity matters is when you have:
x = a ? b : c ? d : e;
Which is interpreted as: x = a ? b : (c ? d : e)
, not as x = (a ? b : c) ? d : e
.
To give a more realistic example:
int getSign(int x) {
return x < 0 ? -1 :
x > 0 ? 1 :
0;
}
This is identical to the (probably more readable) if / else-if statements:
int getSign(int x) {
if (x < 0)
return -1;
else if (x > 0)
return 1;
else return 0;
}