Sequenzpunkte in printf

Ich leseHie dass es einen Sequenzpunkt gibt:

Nach der Aktion, die dem Formatbezeichner für die Eingabe- / Ausgabe-Konvertierung zugeordnet ist. Zum Beispiel im Ausdruckprintf("foo %n %d", &a, 42) gibt es einen Sequenzpunkt nach dem%n wird vor dem Drucken ausgewertet42.

Allerdings, wenn ich laufedieser Code:

int your_function(int a, int b) {
    return a - b;
}

int main(void) {
    int i = 10;

    printf("%d - %d - %d\n", i, your_function(++i, ++i), i);
}

Anstelle dessen, was ich erwarte, bekomme ich:

12 - 0 - 12

Bedeutet, dass esnich Ein Sequenzpunkt, der für den Konvertierungsformatbezeichner erstellt wurde. Isthttp: //en.wikipedia.or falsch, oder habe ich gerade etwas falsch verstanden, oder ist gcc in diesem Fall nicht konform (übrigens liefert Visual Studio 2015 das gleiche unerwartete Ergebnis)?

BEARBEITEN

Ich verstehe, dass die Reihenfolge der Argumente zuyour_function werden ausgewertet und den Parametern zugeordnet ist undefiniert. Ich frage nicht, warum meine mittlere Amtszeit 0 ist. Ich frage, warum die beiden anderen Amtszeiten 12 sind.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage