在GCC下,如果要初始化一个union很简单,像这样的一个union:
union un
{
int a;
struct _s {int sa, sb;} s;
void *p;
};
要在GCC下对它进行初始化,只要这样:
un x =
{
p: NULL
};
即它可以直接指定要对哪个成员赋值。
但是在vs下,在初始化的时候只能对union的第一个成员赋初值,就像这样的:
un x =
{
0
};
如果试图像下面这样直接给union里面的s赋值,则引发编译错误:
un x =
{
{1, 2}
};
但是当我们将union成员的顺序调整为:
union un
{
struct _s {int sa, sb;} s;
int a;
void *p;
};
再使用下面的初始化语句就可以了:
un x =
{
{1, 2}
};