struct中boolean成员的默认初始化值

时间:2015-12-22 13:30:38

标签: c struct

如果我有以下

struct a {
        int a;
        int b;
        bool c;
}

并使用以下初始化函数

struct ls *ls_new(struct ls **ls, size_t *size)
{
        struct ls *m, *n;
        n = realloc(*ls, (*size + 1) * sizeof(struct ls));
        if (!n)
                return NULL;

        *ls = n;
        m = *ls + *size;
        (*size)++;

        // init struct
        *m = (struct ls) {.a = 0}

        return m;
}

当我使用ls_new()初始化struct a的实例时,c99标准保证初始化结构的一个成员也会初始化所有其他成员。 bool c的默认初始化值是什么?

1 个答案:

答案 0 :(得分:3)

  

bool c的默认初始化值是什么?

它是0,即false

自:

  

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

  

(C99,6.7.8p10)"如果没有明确初始化具有自动存储持续时间的对象,则其值是不确定的。如果未明确初始化具有静态存储持续时间的对象,   然后:[...]

     

- 如果它有算术类型,则初始化为(正或无符号)零;

_Bool(其中bool宏扩展为)是算术类型。