初始化工会成员 - 使用MS visual studio

时间:2011-06-15 13:10:17

标签: c data-structures

需要在编译期间初始化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 */

2 个答案:

答案 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