c language-lawyer undefined-behavior sequence-points

Hace int a=1, b=a++; invocar un comportamiento indefinido?



language-lawyer undefined-behavior (1)

Hace int a=1, b=a++; invocar un comportamiento indefinido? No hay un punto de secuencia que intervenga entre la inicialización de a y su acceso y modificación en el inicializador para b , pero por lo que puedo decir, la inicialización no es una "modificación" del objeto; se especifica un inicializador para dar el "valor inicial" del objeto. Por 6.7.8 Inicialización, párrafo 8:

Un inicializador especifica el valor inicial almacenado en un objeto.

y parece razonable tomar la "inicial" como secuenciada antes de cualquier acceso al objeto. ¿Se ha considerado este tema antes, y hay una interpretación aceptada?


No invoca un comportamiento indefinido. En 6.7.6 (3), se indica

Un declarador completo es un declarador que no forma parte de otro declarador. El final de un declarador completo es un punto de secuencia.

que el final de un declarador completo es un punto de secuencia.

int a = 1, b = a++; // ^ end of full declarator