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.

questionAnswers(3)

yourAnswerToTheQuestion