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

时间:2010-01-27 17:32:15

标签: c initialization declaration unions

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

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?

3 个答案:

答案 0 :(得分:32)

使用初始化列表:

U_U32_F u = { 0xffffffff };

您可以通过

设置除第一个之外的其他成员
U_U32_F u = { .f = 42.0 };

答案 1 :(得分:3)

尝试U_U32_F u = {0xffffffff};

答案 2 :(得分:3)

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