Также обратите внимание, что эти (ужасные) выражения являются детерминированными только , потому что используется оператор?:.Этот оператор является одним из очень немногих операторов в языке C, где фактически указан порядок вычисления .Если бы вы написали какую-то другую мерзость, такую как i++ + ++i;
, тогда компилятор мог бы сначала оценить левый операнд или правый операнд, который он выбирает, не определено в языке C.
Как правило, никогда не используйтеоператор ++ как часть выражения с другими операторами.Используйте его только в отдельной строке (или в качестве итератора цикла).Потому что, вопреки распространенному мнению, на самом деле нет причин использовать его вместе с другими операторами.