2011-01-16 19 views
0

mögliche Dubletten:
Output of multiple post and pre increments in one statement
Post-increment and pre-increment in 'for' loopPfosten-/pre-Schritten in 'printf'

Der folgende Codeausschnitt

int i=0; 
printf("%d %d",i++,i++); 

gibt den Ausgang

kann ich verstehen, aber die folgenden

int i=0; 
printf("%d %d",++i,++i); 

gibt dem Ausgang

Kann mir jemand das zweite Verhalten erklären?

+1

Das fängt an, viel wie Hausaufgaben zu riechen, besonders nach Ihrer vorherigen Frage: http://stackoverflow.com/questions/4706199/post-increment-and-pre-increment-in-for-loop – jason

+1

Duplikat von: http://stackoverflow.com/questions/3812850/output-of-multiple-post-and-pre-increments-in-one-statement –

+0

Im nur zu lernen, C nach langer Zeit wieder von Grund auf neu und ich bekomme diese Zweifel: D – theReverseFlick

Antwort

11

Beide printfs rufen undefiniertes Verhalten auf. Siehe dazu: Undefined behavior and sequence points

von diesem Link Zitat:

Kurz gesagt, nicht definiertes Verhalten bedeutet alles von Dämonen fliegen aus der Nase zu Ihrer Freundin schwanger passieren kann.

Für Neulinge: Nicht immer versuchen, Werte Ihrer Variablen zu ändern zweimal oder mehr in einer Funktionsaufruf Argumentliste. Für Details, click here zu wissen, was es bedeutet.

:-)
3

Sie sind beide undefiniertes Verhalten. Das mehrmalige Ändern der Variablen i ist nicht definiert. Auch C++ oder C? Sie müssen sich entscheiden, wie das Verhalten von Vorinkremen, glaube ich, zwischen ihnen unterschiedlich ist.

1

Du hast, was ‚nicht definiertes Verhalten‘ genannt, weil Sie die gleiche Variable mehr als einmal zwischen Sequenzpunkten zu ändern sind. Ein anderer Compiler kann Ihnen unterschiedliche Ergebnisse liefern.