-->
ist kein Operator, es ist die Aneinanderreihung von --
(nach der Dekrementierung) und >
(größer als der Vergleich).
Die Schleife sieht dann eher so aus:
#include <stdio.h>
int main() {
int x = 10;
while (x-- > 0) { // x goes to 0
printf("%d ", x);
}
}
Diese Schleife ist ein klassisches Idiom zum Aufzählen von Werten zwischen 10
(die ausgeschlossene Obergrenze) und 0
die enthaltene untere Grenze, die nützlich ist, um über die Elemente eines Arrays vom letzten zum ersten zu iterieren.
Der Ausgangswert 10
ist die Gesamtzahl der Iterationen (z. B. die Länge des Arrays) und 1 plus der erste Wert, der innerhalb der Schleife verwendet wird. Die 0
ist der letzte Wert von x
innerhalb der Schleife, daher der Kommentar x geht auf 0 .
Beachten Sie, dass der Wert von x
nach Beendigung der Schleife ist -1
.
Beachten Sie auch, dass diese Schleife die dieselbe Weise, wenn x
hat eine Typ ohne Vorzeichen wie zum Beispiel size_t
was ein großer Vorteil gegenüber der naiven Alternative ist for (i = length-1; i >= 0; i--)
.
Aus diesem Grund bin ich eigentlich ein Fan dieser überraschenden Syntax: while (x --> 0)
. Ich finde diese Redewendung auffallend und elegant, genau wie for (;;)
vs: while (1)
(der verwirrend ähnlich aussieht wie while (l)
). Es funktioniert auch in anderen Sprachen, deren Syntax von C inspiriert ist: C++, Objective-C, Java, Javascript, C#, um nur einige zu nennen.