- 1
++i--;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−276.5
++i--;
Операция "подергивание"
Операция "аккордеон", или кипячение.
жестокий баян с баша
[quote=Говногость]жестокий баян с баша[/quote]
#92952 [ + 845 ? ] [:||||:] утверждена 2007-01-20 в 22:44
ну вообще идея говнокода есть, присваивание пред. значения
j = ++i--;
так лучше
А теперь берешь в руки стандарт и вдумчиво читаешь про sequence points. Твой код невалиден, значение j не определено (зависит от конкретной версии компилятора, и далее от расположения зведз на небосводе).
value, or that designates an object or a function, or that generates side effects, or that performs a combination thereof.
Between the previous and next sequence point an object shall have its stored value
modified at most once by the evaluation of an expression. Furthermore, the prior value
shall be read only to determine the value to be stored.
This paragraph renders undefined statement expressions such as
i = ++i + 1;
a[i++] = i;
while allowing
i = i + 1;
a[i] = i;
Так что результат выражения "--i++;" не определен, и не определено значение i.
Ну при чём здесь sequence points? Не "результат выражения --i++ не определён", а выражение --i++ синтаксически неверно! Потому что i++ вообще не является lvalue (ни в Си, ни в плюсах, хотя правила там разные). А если компилятор это во что-то компилит, кроме сообщения об ошибке, то это плохой, негодный компилятор.
В си, емнип, не является. В крестах, емнип, является.
UPD: Хотя на крестах взлетит, но не на си.