Bastante claro en el título, creo. No estoy del todo seguro sobre esto, y no puedo encontrar una buena respuesta a través de los Googles (por desgracia, no he comprometido con el arte de las normas-fu), por lo que pido:Es "int i = x ++, j = x ++;" ¿legal?
int i = x++, j = x++;
¿Esto está definido?
Estoy bastante seguro de que
i = x++, j = x++;
como comportamiento normal sería indefinido
es el operador de coma, que es un punto de secuencia y sería legal, pero ninguna fuente es bastante clara sobre si un inicializador finaliza en el punto y coma o una vez la siguiente variable comienza a declararse, y como ese no es el operador de coma en uso, no puedo encontrar una respuesta clara. Por lo tanto, a) la coma termina el inicializador, es un punto de secuencia y funciona, o b) no. ¿Cuál es?
Y para impedir, sé que debería simplificar el dolor de cabeza y simplemente escribir como:
int i = x++;
int j = x++;
y garantizar que se define. Estoy pidiendo más por curiosidad.
Leí el artículo de la wiki, pero no lo suficiente como para registrar el bit del operador de coma. (Inconsistencias malditas.) De todos modos, GCC nunca me hizo ninguna advertencia y siempre funcionó, así que de alguna manera asumí que sí. –
Antes de la extensión de expresión de sentencia de GCC ('({declaraciones ...; valor})' el operador de coma era la principal forma de crear macros realmente complejas (por ejemplo, putc de stdio). –
No me gustaría ver 'putc()' definido de esa manera. Ese camino solo puede conducir a la locura. –