我有3个元素的数组。但是我只想初始化其中的2个。我让第三个元素为空白。
unsigned char array[3] = {1,2,};
int main(){
printf("%d",array[2]);
return 0;
}
打印结果为0。我在IAR和一些在线编译器上对其进行了测试。
第三个元素的值是否有C规则?是否有任何编译器用0xFF填充第三个元素?(特别是交叉编译器)
是的,C标准确实定义了在这种情况下会发生什么。因此,0xFF
在这种情况下,不应该使用任何符合C标准的编译器。
该标准的第6.7.9节说:
初始化
...
10 ...如果未明确初始化具有静态或线程存储持续时间的对象,则:
- 如果具有指针类型,则将其初始化为空指针;
- 如果具有算术类型,则将其初始化为(正数或无符号)零;
- 如果是聚合,则根据这些规则(递归)初始化每个成员,并将任何填充初始化为零位;
- 如果是联合,则根据这些规则(递归地)初始化第一个命名成员,并将任何填充初始化为零位;
...
21如果用大括号括起来的列表中的初始化程序少于聚合中的元素或成员,或者用于初始化已知大小的数组的字符串文字中的字符少于该数组中的元素,则聚合的其余部分应该与具有静态存储持续时间的对象隐式初始化。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句