Назначение элементов массива при инициализации массива [duplicate]

На этот вопрос уже есть ответ:

Путаница по поводу инициализации массива в C 7 ответов

Рассмотрите следующую простую программу:

#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]);
}

С GCC 7.3.0 это выводит

1 0 1 0 0

Учитывая, чтоa[1] ноль, похоже, что инициализация похожа на

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

Вопрос: хотя инициализаторы могут быть любыми общими выражениями, в каком порядке выполняются инициализация и присваивания?

Это даже верно и четко определено? Может ли это быть определено реализацией, не определено или может быть не указано?

Этот вопрос связан с вопросом Путаница об инициализации массива в C.