除了某些编译器中的第一个元素外,使用{0}的数组初始化失败

Gus*_*sky 4 c c++

可能重复:
C和C++:自动结构的部分初始化

我一直在使用很长一段时间

char array[100] = {0};
Run Code Online (Sandbox Code Playgroud)

将数组的所有元素初始化为0.但是,我最近偶然发现了一个编译器(德州仪器公司的Code Composer Studio).该语句具有仅将第一个元素初始化为0的效果.

这种行为可能是C与C++的差异,编译器的差异,还是这个实现中的错误?

GMa*_*ckG 11

这只是一个错误.在C和C++中,array应该用零填充.


由于这是一个小答案,不妨过火:

C++11§8.5.1/ 7:

如果列表中的initializer-clause少于聚合中的成员,则未显式初始化的每个成员都应从空的初始化列表(8.5.4)初始化.[示例:使用,使用和使用表单表达式的值
struct S { int a; const char* b; int c; };
S ss = { 1, "asdf" };
初始化,即. - 末端的例子]ss.a1ss.b"asdf"ss.cint()0

C99§6.7.8/ 21(抱歉,没有C11副手):

如果括号括起的列表中的初始值设定项少于聚合的元素或成员,或者用于初始化已知大小的数组的字符串文字中的字符数少于数组中的元素,则聚合的其余部分应为隐式初始化与具有静态存储持续时间的对象相同.


pmg*_*pmg 5

在C中,没有部分初始化(参见C11标准中的6.7.9/19 ).对象要么完全初始化(所有字节),要么完全未初始化.

您的编译器不符合C标准.

初始化应在初始化器列表顺序中进行,每个初始化器为特定子对象提供,覆盖同一子对象的任何先前列出的初始化器; 未明确初始化的所有子对象应与具有静态存储持续时间的对象隐式初始化.