【问题标题】:Default initializion value of boolean member in struct结构中布尔成员的默认初始化值
【发布时间】:2015-12-22 13:30:38
【问题描述】:

如果我有以下情况

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 的默认初始化值是多少?

【问题讨论】:

  • 为什么不测试一下看看呢?
  • return m --> return m;
  • @SouravGhosh,错字。谢谢。
  • @stanpines 因为“测试”不是阐明语言属性的理想方法,尤其是关于 C 和 C++,其中 未定义行为 的概念允许不同的编译器处理事情不同。
  • 我说的是size 参数,它不是作为指针传递的。如果发布实际代码,请复制并粘贴实际代码,而不是在帖子中重写它,那么您将不会在发布的代码中出现错误,从而分散您对实际问题的注意力。要么这样,要么创建一个全新的Minimal, Complete, and Verifiable Example 向我们展示,也可以复制和粘贴。

标签: c struct


【解决方案1】:

bool c 的默认初始化值是多少?

它是0,即false

发件人:

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

(C99, 6.7.8p10) “如果一个具有自动存储时长的对象没有被显式初始化,它的值是不确定的。如果一个具有静态存储时长的对象没有被显式初始化, 然后:[...]

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

_Boolbool 宏扩展为)是一种算术类型。

【讨论】:

  • 请注意,所有整数类型都将默认为0。无论如何 +1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-10
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
相关资源
最近更新 更多