Непоследовательная диагностика gcc для инициализации строки

Я использую gcc 4.9.1 / Mingw и компилирую код:

gcc test.c -otest.exe -std = c11 -pedantic-errors -Wall -Wextra

Этот код дает диагностику:

int main (void)
{
  char a[5] = {'h','e','l','l','o','\0'};
}

ошибка: избыточные элементы в инициализаторе массива char a [5]

Однако этот код не выдает предупреждение:

int main (void)
{
  char b[5] = "hello";
}

Я думал, что эти две формы были на 100% эквивалентны. Есть ли какая-либо причина или тонкость в стандарте C и т. Д., Почему последний не должен предупреждать?

Или это ошибка компилятора? Я знаю, что стандарт C допускает избыточные инициализаторы, в отличие от C ++, поэтому формально я не верю, что gccтребуется дать диагностику. Но я ожидаю, что компилятор будет выдавать предупреждения последовательно.

Ответы на вопрос(3)

Ваш ответ на вопрос