C语言数组中未初始化元素的值

时间:2015-09-22 04:05:42

标签: c arrays initialization

我有一个包含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填充第三个元素? (特别是交叉编译器)

3 个答案:

答案 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};