相关疑难解决方法(0)

字符串初始化的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'};
}
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 需要进行诊断.但我希望编译器能够始终如一地发出警告.

c gcc initializer-list

5
推荐指数
2
解决办法
157
查看次数

标签 统计

c ×1

gcc ×1

initializer-list ×1