我使用的是gcc 4.9.1/Mingw,并使用以下命令编译代码:
我认为这两种形式是完全等价的。C标准中是否有任何理由或细微差别,使得后者不应该发出警告?
还是这是编译器的一个bug? 我知道C标准允许超出初始化器的数量,不像C ++,所以从形式上来说,我不认为gcc需要提供诊断。但是我希望编译器能够始终给出警告。
这段代码会产生诊断信息: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";
}
我认为这两种形式是完全等价的。C标准中是否有任何理由或细微差别,使得后者不应该发出警告?
还是这是编译器的一个bug? 我知道C标准允许超出初始化器的数量,不像C ++,所以从形式上来说,我不认为gcc需要提供诊断。但是我希望编译器能够始终给出警告。
int arr[2] = { 1, 2, 3, 4 };
在两种语言中都是不合法的。 - Keith Thompsonchar b[5] = "hello";
中,初始化器并没有为b[5]
提供值。 - Keith Thompson