Непоследовательная диагностика 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требуется дать диагностику. Но я ожидаю, что компилятор будет выдавать предупреждения последовательно.