初始化工会成员-使用MS Visual Studio

问题描述

| 需要在编译时初始化一个union成员。 阅读一些文章似乎只能定义第一个 参加工会。除非使用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 */
    

解决方法

        初始化联合时,联合的第一个命名成员是将要初始化的成员(ISO 9899:1999 6.7.8§17)。 也就是说,除非您像在最后一行尝试那样使用C99指定的初始化程序,否则所选成员就是将要初始化的成员。但是VS显然不支持C99。 通过将联合声明更改为以下方法来解决该问题:
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}; 
    ,        Windows不完全支持C99,仅完全支持某些功能,因为Windows主要是C ++编译器。 干得好: http://connect.microsoft.com/VisualStudio/feedback/details/485416/support-c99     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...