gpt4 book ai didi

c - 匿名联盟的目的是什么?

转载 作者:行者123 更新时间:2023-12-05 08:51:37 28 4
gpt4 key购买 nike

通过在结构中声明匿名 union ,您可以直接访问成员。这是有道理的,我想,就像一个普通的 union ,你只能从最近写入的值中读取。 Then I saw this

#include<stdio.h> 
struct Scope
{
// Anonymous union
union
{
char alpha;
int num;
};
};

int main()
{
struct Scope x;
x.num = 65;

// Note that members of union are accessed directly
printf("x.alpha = %c, x.num = %d", x.alpha, x.num);

return 0;
}

那么,如果我可以一直访问所有变量,那有什么意义呢?为什么不直接在“Scope”范围内声明变量?

最佳答案

根据 C11 6.2.6.1 ,被访问成员的值是未指定的。一般来说,它可能是一个陷阱表示,会触发未定义的行为。

(如果您将 char 更改为 unsigned char,那将是安全的,因为 unsigned char 不能有陷阱表示。因此您的程序将运行完成并打印一些东西,但 C 标准没有指定将为 x.alpha 打印什么值。)

当然,任何给定的实现都可以指定您实际获得的值(例如,x.num 的低字节或高字节)。因此,此类代码很可能仅适用于此类实现,并不意味着可移植或符合标准。

正如 Peter 所说,所有这一切都与您使用的是匿名 union 还是老式 union 无关。

关于c - 匿名联盟的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59419836/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com