6.7 Условные операторы с опущенными операндами
Средний операнд в условном выражении может быть опущен. Тогда, если первый операнд отличен от нуля, его значение является значением условного выражения.
Следовательно, выражение
x ? : y
имеет значение x если оно отлично от нуля; в противном случае, значение y.
Этот пример полностью эквивалентен
x ? x : y
В этом простом случае возможность опускать средний операнд не особенно полезна. Полезной она становится, когда первый операнд содержит (или может содержать, если это аргумент макроса) побочный эффект. Тогда повторное указание операнда в середине привело бы к выполнению побочного эффекта дважды. Опуская средний операнд, используется уже вычисленное значение без нежелательных эффектов повторного вычисления.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-7.5.0/gcc/Conditionals.html