我有一个包含3个元素的数组。但我只想初始化其中的两个。 我让第三个元素空白。
return {
userInfo: function() {
$.when(fbUserInfo())..then(
function(user) {
curruser = user;
$http.get(/*send GET request to my server*/).success(function(response) {
if (response.length < 20) {
curruser.firsttime = true;
} else {
curruser.firsttime = false;
}
console.log(curruser);
console.log("1");
});
},
function(error) {
alert('Facebook error: ' + error.error_description);
}).then(function(){
console.log(curruser);
return curruser;
})
}
打印结果为0.我在IAR上测试了它,还有一些在线编译器。
第三个元素的值是否有任何C规则? 是否有任何编译器通过0xFF填充第三个元素? (特别是交叉编译器)
答案 0 :(得分:11)
是的,C标准确实定义了这种情况下会发生什么。所以不,在这种情况下,应该没有符合C标准的编译器与0xFF
进行初始化。
标准第6.7.9节说:
<强>初始化强>
...
10 ...如果具有静态或线程存储持续时间的对象不是 显式初始化,然后:
- 如果它有指针类型,则将其初始化为空指针;
- 如果它有算术类型,那就是 初始化为(正数或无符号)零;
- 如果是聚合, 根据这些规则初始化(递归)每个成员, 并且任何填充都被初始化为零位;
- 如果是联合,则根据这些规则初始化(递归)第一个命名成员,并将任何填充初始化为零位;
...
21如果括号括起的列表中的初始值设定项少于此值 是聚合的元素或成员,或者是一个或多个字符 string literal用于初始化已知大小的数组 是数组中的元素,聚合的其余部分应为 隐式初始化与具有静态存储的对象相同 持续时间。
答案 1 :(得分:0)
从this帖子看,该语法似乎会将逗号后的所有元素初始化为零。此外;程序数据段中的所有未初始化数据(换句话说,所有未初始化的全局变量)都自动设置为零,因此如果您在此程序中查找未定义的行为,则不会有任何行为;它总是0。
答案 2 :(得分:0)
这可以通过gcc扩展来实现,如下所示 unsigned char array [10] = {1,2,[2 ... 9] = 0xFF};