Diagnóstico gcc inconsistente para inicialização de string
Estou usando o gcc 4.9.1 / Mingw e compilando o código com:
gcc test.c -otest.exe -std = c11 -pedantic-erros -Wall -Wextra
Este código fornece um diagnóstico:
int main (void)
{
char a[5] = {'h','e','l','l','o','\0'};
}
erro: excesso de elementos no inicializador de array char a [5]
No entanto, este código não gera um aviso:
int main (void)
{
char b[5] = "hello";
}
Eu pensei que as duas formas eram 100% equivalentes. Existe alguma razão ou sutileza no padrão C, etc., por que o último não deve dar um aviso?
Ou isso é um bug do compilador? Eu sei que o padrão C permite excesso de inicializadores, diferentemente do C ++, então formalmente não acredito que o gcc sejarequeridos para dar um diagnóstico. Mas eu esperaria que o compilador desse avisos consistentemente.