El operador coma (,) en C permite combinar varias expresiones, cuyo resultado es el valor de la última expresión.
Ejemplo:
int a = 1, b = 2, c; c = (a += 2, b += 3, a + b); // primero incrementamos a, luego b, luego sumamos a + b
Uso:
for, donde se deben realizar varias acciones.Detalles:
Ejemplo de bucle:
for (i = 0, j = 10; i < j; ++i, --j) { /* ... */ }
¿Cuál es la diferencia entre la coma como operador y como separador en la lista de argumentos de una función?
Error común: Se considera que la coma en cualquier lugar es un operador y siempre combina expresiones.
Respuesta correcta: La coma es un operador solo fuera de las listas de inicialización, argumentos y elementos de matríz. Por ejemplo:
int x = (1, 2); // x == 2, aquí es un operador void foo(int a, int b) { ... } // aquí es un separador
La coma como operador solo funciona dentro de los paréntesis, en otros casos es simplemente un separador.
Historia
Un macro, donde dentro de do { ... } while (0) se utilizó el operador coma para combinar instrucciones sin paréntesis, resultó en algo como if (a) MACRO(); else ... produciendo un error de sintaxis debido a la incorrecta sintaxis del macro.
Historia
La confusión entre la prioridad del operador coma y la prioridad de asignación hacía que la expresión a = b, c = d; funcionara como (a = b), (c = d), mientras que el programador suponía que ambas asignaciones se realizaban simultáneamente como parte de una única expresión.
Historia
En una función se utilizó la coma para llamar a funciones secuencialmente, pero se ignoró que solo se devuelve el último valor. Se asumió que la expresión resultante combinaba los efectos de todas las llamadas, mientras que, en realidad, solo eran importantes los efectos secundarios de las primeras llamadas, y sus valores de retorno se perdían.