我正在尝试全局初始化一个联合,如下例所示:
#include <cstdio>
typedef union {
char t[4];
int i;
} a;
enum {
w = 5000,
x,
y,
z
};
a temp = {w};
int main() {
printf("%d %d %d %d %d\n", temp.t[0],temp.t[1],temp.t[2],temp.t[3],temp.i);
return 0;
}
但是,如果您运行代码,您会注意到 temp.i 或 temp.t[...] 实际上都没有给出我初始化联合所用的正确项目。我想如果我可以手动初始化整数成员,就可以避免这种情况,但不幸的是我不能。我也无法更改结构中元素的顺序(交换 int 和 char 顺序可以正确初始化所有内容) - 它们实际上是由外部库提供的。
我的问题是:如何设置结构体的整数成员globally,而不是 char[4] 成员(或者,在本例中,只是 char[] 的第一个元素)?
编辑:另外,这个问题有严格的C++解决方案吗?即命名结构初始化不起作用(因为它在语言中不存在)?
在 C99 中你可以这样做:
a temp = { .i=w };
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)