Na, wer weiß was hier zurückgegeben wird?Code:main(){
int i = 0;
return i++ + ++i;
}
Druckbare Version
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;
}
... :P
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.
https://media1.giphy.com/media/14dJO1KaLti4p2/200_s.gif
http://de.cppreference.com/w/cpp/lan...tor_precedenceZitat:
a) nicht definiert ist welcher Operand des + Operators als erstes evaluiert wi
KK ...
Aber jetzt wissen wir wenigstens warum 2 rauskommt und nicht 1.Zitat:
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++;
}
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.