联盟可以在声明中初始化吗?

例如,假设我们有一个联盟

typedef union { unsigned long U32; float f; }U_U32_F; 

当声明了这个union类型的变量时,有没有办法设置初始值?

 U_U32_F u = 0xffffffff; // Does not work...is there a correct syntax for this? 

使用初始化列表:

 U_U32_F u = { 0xffffffff }; 

您可以设置除第一个之外的其他成员

 U_U32_F u = { .f = 42.0 }; 

试试U_U32_F u = {0xffffffff};

请注意,每个成员联合初始化在C99之前的编译器上不起作用,其中有一个令人沮丧的数字。 例如,当前的Microsoft C编译器不支持它。 (我隐约回想起它甚至不支持第一成员初始化,这可以追溯到K&R II,但我可能错了。)