需要在编译期间初始化union成员。 阅读一些文章似乎除了仅定义第一篇文章之外别无他法 进入工会。除非您使用C99,否则您可以专门定义每个工会成员。
事情是我使用Visual Studio 2010教授。似乎它不支持C99或我如何启用ist? 或者是否有另一种初始化工会成员的方法?
感谢
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 */
答案 0 :(得分:4)
初始化并集时,union的第一个命名成员是将要初始化的成员(ISO 9899:19996.7.8§17)。
也就是说,除非您在最后一行使用C99指定的初始值设定项,否则所选的成员将是要初始化的成员。但是,CS显然不支持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};
答案 1 :(得分:0)
Windows并不完全支持C99,只支持选定的功能,因为它主要是C ++编译器。
你走了: http://connect.microsoft.com/VisualStudio/feedback/details/485416/support-c99