Tag: 初始化列表

在C,C ++中进行初始化排序

考虑以下初始化: /* C, C++ */ int a[] = { f(), g() }; struct { int x, y } foo = { f(), g() }; /* C++ */ struct goo { goo(int x, int y); }; goo b = { f(), g() }; goo c { f(), g() }; /* C++11 */ goo d ( f(), […]

用于字符串初始化的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 [5] 但是,此代码不会产生警告: int main (void) { char b[5] = “hello”; } 我认为这两种forms是100%相同的。 C标准中有什么理由或微妙之处,为什么后者不应该发出警告? 或者这是编译器错误? 我知道C标准允许多余的初始化器,与C ++不同,所以我不相信gcc 需要进行诊断。 但我希望编译器能够始终如一地发出警告。