gpt4 book ai didi

c - 初始化 union 成员 - 使用 MS visual studio

转载 作者:太空狗 更新时间:2023-10-29 15:33:40 26 4
gpt4 key购买 nike

需要在编译时初始化一个 union 成员。阅读一些文章似乎除了定义第一个之外别无他法加入 union 。除非您使用 C99,否则您可以专门定义每个 union 成员。

问题是我使用的是 Visual Studio 2010 Prof。它似乎不支持 C99 或者我如何启用 ist?或者是否有其他方法来初始化 union 成员?

谢谢

typedef union {
int a;
char *atxt;
} MY_UNION_t;
typedef struct {
int foo;
MY_UNION_t un;
}GEN_DATA_t;

/* need to do following: */
GEN_DATA_t obj1 = {0,1}; /* Okay works */
GEN_DATA_t obj2 = {0,"bla"}; /* Does not work */

/* ISO C99 allows: */
GEN_DATA_t obj3 = {0,.atext="bla"}; /* However MS VS seem not to support this */

最佳答案

当初始化 union 体时, union 体的第一个命名成员将被初始化(ISO 9899:1999 6.7.8 §17)。

也就是说,除非您像在最后一行尝试的那样使用 C99 指定的初始化器,否则选择的成员将被初始化。但是VS显然不支持C99。

通过将 union 声明更改为来解决问题:

typedef union {
char *atxt;
int a;
} MY_UNION_t;

/* make sure that the string "bla" isn't allocated in read-only memory,
since you intend to point at it with a non-const pointer */
char bla[] = "bla";

GEN_DATA_t obj2 = {0, bla};

关于c - 初始化 union 成员 - 使用 MS visual studio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6358156/

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