De komma-operator (,) in C stelt je in staat om meerdere uitdrukkingen te combineren, waarvan het resultaat de waarde van de laatste uitdrukking is.
Voorbeeld:
int a = 1, b = 2, c; c = (a += 2, b += 3, a + b); // verhoog eerst a, dan b, en tel a + b op
Gebruik:
for-lus, waar meerdere acties moeten worden uitgevoerd.Fijnere details:
Voorbeeld van een lus:
for (i = 0, j = 10; i < j; ++i, --j) { /* ... */ }
Wat is het verschil tussen de komma als operator en als scheidingsteken in de argumentenlijst van een functie?
Veelgemaakte fout: Men denkt dat de komma op elk punt een operator is en altijd uitdrukkingen verbindt.
Juiste antwoord: De komma is alleen een operator buiten initialisatielijsten, argumenten en array-elementen. Bijvoorbeeld:
int x = (1, 2); // x == 2, hier is het een operator void foo(int a, int b) { ... } // hier is het een scheidingsteken
De komma als operator werkt alleen binnen haakjes, in andere gevallen is het gewoon een scheidingsteken.
Verhaal
Een macro, waar binnen do { ... } while (0) de komma-operator werd gebruikt om instructies zonder haakjes te combineren, leidde ertoe dat iets als if (a) MACRO(); else ... een syntaxisfout veroorzaakte vanwege de verkeerde syntaxis van de macro.
Verhaal
Verwarring tussen de prioriteit van de komma-operator en de prioriteit van toekenning leidde ertoe dat de uitdrukking a = b, c = d; werkte als (a = b), (c = d), terwijl de programmeur dacht dat beide toekenningen gelijktijdig werden uitgevoerd als onderdeel van één enkele uitdrukking.
Verhaal
In een functie werd een komma gebruikt voor opeenvolgende functieaanroepen, maar het werd genegeerd dat alleen de laatste waarde werd geretourneerd. Er werd aangenomen dat de resulterende uitdrukking de effecten van alle aanroepen combineerde, terwijl in feite alleen de bijeffecten van de eerste aanroepen belangrijk waren, en hun geretourneerde waarden verloren gingen.