Ich verwende meinen C-Code auf gcc, um den Pre-/Post-Inkrement-Operator zu verstehen. Allerdings sind die Ergebnisse, die ich sehe, nicht das, was ich erwartet habe. Wie für die Linie 6, da ich 5 ist, haben esIst dies ein undefiniertes Verhalten in C?
8 7 6 5 5
sein sollen Aber es ist 8 7 6 5 8
dann auf die letzte Zeile kommt, zeigt es 14 14 14 14
. Kann mir bitte jemand dieses Verhalten erklären. Ich hatte erwartet 14 14 13 12
Ist dieser Compiler abhängig? Ist das Verhalten der printf-Funktion auf Sequenzpunkten undefiniert?
#include <stdio.h>
int main()
{
i = 5;
printf("%d %d %d %d %d \n", i, i++, i++, i++, i);
printf("%d \n", ++i);
printf("%d \n", ++i);
printf("%d \n", ++i);
printf("%d %d %d %d \n", i, ++i, ++i, ++i);
}
Es ist undefiniertes Verhalten. Ihre Erwartungen werden vom C-Standard – CIsForCookies
nicht unterstützt. Es kann nicht erklärt werden, es ist undefiniertes Verhalten. Sie können nicht mehrere Inkremente derselben Variablen in eine einzelne Anweisung einfügen. –
Moral der Geschichte: Vermeiden Pre/Post Inkrement in 99% der Situationen. Leser Ihres Codes werden es zu schätzen wissen. – Alexander