Asignación de elementos de matriz en la inicialización de matriz [duplicado]

Esta pregunta ya tiene una respuesta aquí:

Confusión sobre la inicialización de la matriz en C 7 respuestas

Considere el siguiente programa simple:

#include <stdio.h>

int main(void)
{
    int a[5] = { a[2] = 1 };
    printf("%d %d %d %d %d\n", a[0], a[1],a[2], a[3], a[4]);
}

Con GCC 7.3.0 esto genera

1 0 1 0 0

Teniendo en cuenta quea[1] es cero, parece que la inicialización es similar a

int a[5] = { 1 };
a[2] = 1;

La pregunta es: si bien los inicializadores podrían ser cualquier expresión genérica, ¿en qué orden se realizan la inicialización y las asignaciones?

¿Es esto incluso válido y bien definido? ¿Podría ser definido por la implementación, indefinido o quizás no especificado?

Esta pregunta está relacionada con la pregunta Confusión sobre la inicialización de la matriz en C.

Respuestas a la pregunta(1)

Su respuesta a la pregunta