可能重复:
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副手):
如果括号括起的列表中的初始值设定项少于聚合的元素或成员,或者用于初始化已知大小的数组的字符串文字中的字符数少于数组中的元素,则聚合的其余部分应为隐式初始化与具有静态存储持续时间的对象相同.