Na, wer weiß was hier zurückgegeben wird?Code:main(){ int i = 0; return i++ + ++i; }
Na, wer weiß was hier zurückgegeben wird?Code:main(){ int i = 0; return i++ + ++i; }
Habs jetzt nicht ausprobiert, aber würde 1 vermuten weil die zweite Inkrementierung hinter dem Rücksprung liegen könnte und somit nie ausgeführt wird. Liege ich richtig? Allerdings könnte man nem Compiler auch unterstellen dass er schlau genug ist nach nem Ret keinen unerreichbaren Code mehr zu erzeugen, müsste man mal disassemblen.
C++ ... where your pointers dangle and friends get to play with your private members...
Gerade mal mit dem TCC ausprobiert, der macht ne 2 draus.
Javascript:
Answer: 2Code:function meh() { var i=0; return i++ + ++i; }
...
Ist zwar C, aber ok ¯\_(ツ)_/¯
Ich hab den wichtigen Teil mal hervorgehoben
Es ist undefindiertes Verhalten, da im Standard
a) nicht definiert ist welcher Operand des + Operators als erstes evaluiert wi
b) auch die Priorität zwischen dem pre- und suffix Inkrement-Operator undefiniert ist.
Es kommt also am Ende ganz auf den Compiler an.
Starflow (16.12.2016)
http://de.cppreference.com/w/cpp/lan...tor_precedencea) nicht definiert ist welcher Operand des + Operators als erstes evaluiert wi
KK ...
Aber jetzt wissen wir wenigstens warum 2 rauskommt und nicht 1.Bemerkungen Prioritätsstufen sind nicht durch die Norm spezifiziert, sondern aus der Grammatik hergeleitet.
Ich vermute mal das ist was die meisten Compiler draus machen?
Code:main(){ int i = 0; return i + ++i; i++; }
Freiheit stirbt mit Sicherheit
nrxpro (25.12.2016)
Das ist C++, nicht C.
Glaub mir doch, GCC hat dafür sogar eine Warnung:
Code:(strflw@air) ~> gcc -o testr testr.c -Wall /Users/strflw/test.c:1:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int] main(){ ^ /Users/strflw/test.c:3:11: warning: multiple unsequenced modifications to 'i' [-Wunsequenced] return i++ + ++i; ^ ~~ 2 warnings generated.