Recientemente me enteré del operador ,
y el hecho de que introduce un punto de secuencia.¿i = 0, ++ i definido?
También aprendí que el siguiente código condujo a un comportamiento indefinido:
i = ++i;
Debido i
se modificó dos veces entre dos puntos de secuencia.
¿Pero qué pasa con los siguientes códigos?
i = 0, ++i;
i = (0, ++i);
Si bien conozco las reglas, no puedo llegar a una conclusión. Entonces, ¿es un comportamiento definido o no?
edición: Así como @paxdiablo menciones, definido o no, esto es realmente una mala práctica que debe ser evitado. Esta pregunta se realiza únicamente con fines educativos y una mejor comprensión de las "reglas".
No sé por qué la gente sigue haciendo preguntas como esta. No importa si es indefinido, es un código malo. Deberías _no_ usarlo, definido o de otra manera. – paxdiablo
@paxdiablo: ¿De verdad crees que utilizaría una declaración tan inútil en el código real? Solo se trata de entender las reglas mejor. Nada mas. – ereOn
@ereOn es bueno aprender las reglas, eso es cierto. Pero después de un tiempo, la experiencia generalmente lleva a los codificadores a evitar construcciones que no están bien definidas y que son de uso común en todas las plataformas. –