我正在使用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'};
}
Run Code Online (Sandbox Code Playgroud)
错误:数组初始化器中的多余元素char [5]
但是,此代码不会产生警告:
int main (void)
{
char b[5] = "hello";
}
Run Code Online (Sandbox Code Playgroud)
我认为这两种形式是100%相同的.C标准中是否有任何理由或微妙之处,为什么后者不应该发出警告?
或者这是编译器错误?我知道C标准允许多余的初始化器,与C++不同,所以我不相信gcc 需要进行诊断.但我希望编译器能够始终如一地发出警告.