未显式初始化的全局并集变量的哪个成员将隐式初始化为0?

xiaokaoy

例如

union
{
    int n;
    void *p;
} u;

un或up的初始值等于0吗?

应该注意的是,NULL指针不一定存储在全零位中。因此,即使un和up的大小相同,

u.n == 0

不保证

u.p == 0

反之亦然。

(对不起,我的英语不好)

沙菲克·雅格莫(Shafik Yaghmour)

由于u是静态的,则第一构件将被初始化为zero,从C99草案标准部分6.7.8 初始化10

如果未自动初始化具有自动存储期限的对象,则其值不确定。如果具有静态存储持续时间的对象未显式初始化,则

—如果具有指针类型,则将其初始化为空指针;

—如果具有算术类型,则将其初始化为(正数或无符号)零;

—如果是聚合,则根据这些规则(递归)初始化每个成员;

如果它是联合,则将根据这些规则初始化(递归)第一个命名成员。

由于narithmetic type,它将被初始化为zero的值p未指定,但实际上编译器通常支持类型punning,例如gcc手册中的Type- punning,我们可以在-fstrict-aliasing部分看到以下内容

从不同于最近写过的工会会员(称为“打字手法”)的成员中读取信息的做法很常见。即使使用-fstrict-aliasing,只要通过联合类型访问内存,也可以进行类型修剪。

还值得注意的是,您may可以像这样初始化联盟的任何成员:

union { int n; void *p; } u = { .p = NULL } ;
                              ^^^^^^^^^^^^^

我不确定是否所有编译器都支持此功能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

模板类的静态成员变量的隐式初始化

来自分类Dev

C ++:显式vs隐式默认初始化

来自分类Dev

类成员,隐式初始化为零?

来自分类Dev

不要将变量显式初始化为null

来自分类Dev

为什么C和C ++编译器将显式初始化和默认初始化的全局变量放在不同的段中?

来自分类Dev

隐式类型的局部变量必须初始化

来自分类Dev

隐式类型的局部变量必须初始化

来自分类Dev

隐式初始化静态类

来自分类Dev

显式声明期间的初始化

来自分类Dev

条件字典显式初始化

来自分类Dev

GO显式数组初始化

来自分类Dev

条件字典显式初始化

来自分类Dev

在复制初始化中,对复制构造函数的调用是显式还是隐式的?

来自分类Dev

C ++成员变量未初始化

来自分类Dev

在循环中创建新对象时,将初始化未初始化的成员变量

来自分类Dev

显式实例化模板的静态成员和另一个静态变量的初始化顺序

来自分类Dev

为什么显式声明的构造函数阻止使用C ++ 11初始化列表进行成员初始化?

来自分类Dev

为什么显式声明的构造函数阻止使用C ++ 11初始化列表进行成员初始化?

来自分类Dev

(POD结构,POD类和POD)成员的C ++隐式类成员初始化

来自分类Dev

C++在初始化类实例时隐式调用类成员的构造函数

来自分类Dev

错误:构造函数必须显式初始化引用成员

来自分类Dev

错误:构造函数必须显式初始化引用成员

来自分类Dev

类组合构造函数d必须显式初始化引用成员

来自分类Dev

无法隐式初始化std ::函数

来自分类Dev

如何使初始化列表隐式转换为类?

来自分类Dev

休眠:避免隐式初始化集合

来自分类Dev

列表初始化是隐式转换吗?

来自分类Dev

聚合子对象的隐式初始化

来自分类Dev

无法隐式初始化std ::函数

Related 相关文章

  1. 1

    模板类的静态成员变量的隐式初始化

  2. 2

    C ++:显式vs隐式默认初始化

  3. 3

    类成员,隐式初始化为零?

  4. 4

    不要将变量显式初始化为null

  5. 5

    为什么C和C ++编译器将显式初始化和默认初始化的全局变量放在不同的段中?

  6. 6

    隐式类型的局部变量必须初始化

  7. 7

    隐式类型的局部变量必须初始化

  8. 8

    隐式初始化静态类

  9. 9

    显式声明期间的初始化

  10. 10

    条件字典显式初始化

  11. 11

    GO显式数组初始化

  12. 12

    条件字典显式初始化

  13. 13

    在复制初始化中,对复制构造函数的调用是显式还是隐式的?

  14. 14

    C ++成员变量未初始化

  15. 15

    在循环中创建新对象时,将初始化未初始化的成员变量

  16. 16

    显式实例化模板的静态成员和另一个静态变量的初始化顺序

  17. 17

    为什么显式声明的构造函数阻止使用C ++ 11初始化列表进行成员初始化?

  18. 18

    为什么显式声明的构造函数阻止使用C ++ 11初始化列表进行成员初始化?

  19. 19

    (POD结构,POD类和POD)成员的C ++隐式类成员初始化

  20. 20

    C++在初始化类实例时隐式调用类成员的构造函数

  21. 21

    错误:构造函数必须显式初始化引用成员

  22. 22

    错误:构造函数必须显式初始化引用成员

  23. 23

    类组合构造函数d必须显式初始化引用成员

  24. 24

    无法隐式初始化std ::函数

  25. 25

    如何使初始化列表隐式转换为类?

  26. 26

    休眠:避免隐式初始化集合

  27. 27

    列表初始化是隐式转换吗?

  28. 28

    聚合子对象的隐式初始化

  29. 29

    无法隐式初始化std ::函数

热门标签

归档