Der Kommaoperator (,) in C ermöglicht es, mehrere Ausdrücke zu kombinieren, wobei das Ergebnis der Wert des letzten Ausdrucks ist.
Beispiel:
int a = 1, b = 2, c; c = (a += 2, b += 3, a + b); // Zuerst erhöhen wir a, dann b, dann addieren wir a + b
Verwendung:
for-Schleifen verwendet, in dem mehrere Aktionen ausgeführt werden müssen.Finessen:
Beispiel einer Schleife:
for (i = 0, j = 10; i < j; ++i, --j) { /* ... */ }
Was ist der Unterschied zwischen dem Komma als Operator und als Trennzeichen in der Argumentliste einer Funktion?
Häufiger Fehler: Es wird angenommen, dass das Komma an jeder Stelle ein Operator ist und immer Ausdrücke kombiniert.
Richtige Antwort: Das Komma ist nur außerhalb von Initialisierungslisten, Argumenten und Array-Elementen ein Operator. Zum Beispiel:
int x = (1, 2); // x == 2, hier ist es ein Operator void foo(int a, int b) { ... } // hier ist es ein Trennzeichen
Das Komma als Operator funktioniert nur innerhalb von Klammern, in allen anderen Fällen ist es einfach ein Trennzeichen.
Geschichte
Ein Makro, in dem innerhalb von do { ... } while (0) der Kommaoperator zur Kombination von Anweisungen ohne Klammern verwendet wurde, führte dazu, dass etwas wie if (a) MACRO(); else ... einen Syntaxfehler aufgrund einer falschen Makrosyntax verursachte.
Geschichte
Verwirrung zwischen der Priorität des Kommaoperators und der Priorität der Zuweisung führte dazu, dass der Ausdruck a = b, c = d; wie (a = b), (c = d) funktionierte, während der Programmierer annahm, dass beide Zuweisungen gleichzeitig als Teil eines einzigen Ausdrucks ausgeführt werden.
Geschichte
In einer Funktion wurde das Komma zur sequentiellen Aufruf von Funktionen verwendet, aber es wurde ignoriert, dass nur der letzte Wert zurückgegeben wird. Es wurde angenommen, dass der resultierende Ausdruck die Effekte aller Aufrufe kombiniert, während tatsächlich nur die Nebenwirkungen der ersten Aufrufe wichtig waren und ihre Rückgabewerte verloren gingen.