Потому что Ява и Пхп обрабатывают строки сразу и последовательно, а Си обрабатывает их целиком, и у него приоритет инкримента выше чем приоритет сложения.
Вот от этого и разный результат.
Господа, не ругайтесь. В С (и, скорее всего, в С++ тоже) есть такое понятие как sequence point. Инкременты и сложение к ним не относятся, так что результат зависит от трактовки конкретным компилятором.
Zanokra
Нет, поскольку не определен точно момент времени, когда переменной i будет присваиваться значение i+1. Замени ++i на (i+=1) для наглядности.
C99, 6.5.3.1, Prefix increment and decrement operators: The expression ++E is equivalent to (E+=1).
C99, 6.5.16, Assignment operators: The side effect of updating the stored value of the left operand shall occur between the previous and the next sequence point.
Варианты ответов, для разных компиляторов и разных вариантов оптимизации: 6,7,12,13,14.
vakito интересно, вариант на 6 и на 7 где-нибудь реально используется?
Gnu и иже с ними?
Там полно софта, который собирается только конкретной версией компилятора и только с определенными опциями.
жаль в абапе нет таких фишек...
А теперь представь себе, что тебе надо саппортить код, в котором полно подобного. Даже простой переезд на новую версию компилятора представляет собой засаду
Zanokra
я видел, как пишут классные коды именно с этими фишками. Только разобраться потом невозможно, но работает! Anafay Gnu и иже с ними?
жаль проверить мне негде. но в возможность присваивания результата инкремента после сложения верится с трудом... Даже простой переезд на новую версию компилятора
как же мы по шестерке облизываемся....
а засад с переездом с версии на версию и так вагон