ternary operator without else in C ternary operator without else in C c c

ternary operator without else in C


If you are using a ternary operator like that, presumably it could be replaced by:

if (a) { b; }

which is much, much better. (The intent is clearer, so the code is easier to read, and there will be no performance loss.)

However, if you are using the ternary operator as an expression, i.e.

printf("%d cat%s", number_of_cats, number_of_cats != 1 ? "s" : <nothing>);a = b*c + (d == 0 ? 1 : <nothing>);

then the <nothing> value depends on the context it is being used in. In my first example, <nothing> should be "", and in the second it should be 0.


An omitted false expression is invalid. Try reversing the condition instead.

(!a) ?: b;


if-else is a control flow construct wheras ?: is an operator, and x ? y : z is an expression - an expression cannot have "no value", while control flow can have a "do nothing path". There is no real equivalence between if-else and ?: - they are not interchangeable in all circumstances.

You can achieve the effect you want in some circumstances, but it is probably less efficient that using if without else. For example the effect of:

if( x ){    y = z ;}

can be achieved by:

y = x ? z : y ;

but there is an effective but redundant else y = y assignment when x is false which your compiler may or may not optimise out. So you can achieve the effect but only if you know the "current value" to return as the ?: expression result.