Работает как указано.К сожалению, вы неправильно используете это.Вы, кажется, ожидаете, что проверка условия должна привести к одному из двух вызовов функций:
printf("%d",x);
printf("0");
Это теперь не так, как работает Си.Вы используете условное выражение, поэтому результатом должно быть одно значение, которое переводится в один аргумент функции.Запятая, которую вы написали, не является запятой, которая используется для разделения аргументов функций.Это оператор запятой , который сам является выражением.
Семантика выражения "%d", x
заключается в оценке "%d"
, отбрасывании результата изатем оцените x
.x
является результатом выражения с оператором запятой.
Это означает, что ваш вызов функции эквивалентен
printf(1 > 0 ? x : "0");
Вы передаете целое число, где ожидается указатель на строку.Приличный компилятор должен пометить это, по крайней мере, предупреждением, а если это не ваше, вам нужно указать ему соответствующие флаги, чтобы предупредить вас об этом.