初始化联合成员 - 使用 MS Visual Studio

cod*_*itz 4 c data-structures

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

问题是我使用 Visual studio 2010 Prof。它似乎不支持 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 */
Run Code Online (Sandbox Code Playgroud)

Lun*_*din 5

初始化联合时,联合的第一个命名成员就是将被初始化的成员 (ISO 9899:1999 6.7.8 \xc2\xa717)。

\n\n

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

\n\n

通过将联合声明更改为以下方式解决该问题:

\n\n
typedef union {\nchar *atxt;\nint a;\n} MY_UNION_t;\n\n/* make sure that the string "bla" isn\'t allocated in read-only memory, \n   since you intend to point at it with a non-const pointer */\nchar bla[] = "bla";  \n\nGEN_DATA_t obj2 = {0, bla}; \n
Run Code Online (Sandbox Code Playgroud)\n