У вас есть несколько троичных операторов в выражении printf("%d", 0 ? 1 ? 2 : 3 : 4 );
И когда когда-либо один и тот же оператор приходит несколько раз, мы использовали для проверки associativity
, который составляет от Right
до Left
для троичного оператора, т.е. сначаларешает right most ternary opeartor
.Или вы можете увидеть это в man 1 operator
Первый выбор наиболее правого троичного оператора 1 ? 2 : 3
, что приводит к 2
.Теперь 3
ушел.
Теперь он становится 0 ? 2 : 4
, что приводит к 4
.Вот почему он печатает 4
.
Примечание: - Как уже говорили другие, с помощью правильного ассоциативного троичного оператора вы можете сложить их и построить выражение if-else
, например:
if(0){
if(1)
printf("%d\n", 2);
else
printf("%d\n", 3);
}
else
printf("%d\n", 4);