Atribuição de elementos do array na inicialização do array [duplicado]
Esta pergunta já tem uma resposta aqui:
Confusão sobre inicialização de array em C 7 respostasConsidere o seguinte programa simples:
#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]);
}
Com o GCC 7.3.0 isso gera
1 0 1 0 0
Considerando quea[1]
é zero, parece que a inicialização é semelhante a
int a[5] = { 1 };
a[2] = 1;
A questão é: embora os inicializadores possam ser qualquer expressão genérica, em que ordem as inicializações e atribuições são feita
Isso é válido e bem definido? Poderia ser definido pela implementação, indefinido ou talvez não especificado?
Esta questão está relacionada à pergunta Confusão sobre inicialização de matriz em C.