联合体可以在声明时初始化吗?

32

例如,假设我们有一个联合体

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

当声明一个联合类型的变量时,有没有一种方法可以设置初始值?

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

@Prasoon 抱歉,我已经定义了u32但是在示例中没有显示出来。 - semaj
3个回答

41

使用初始化器列表:

U_U32_F u = { 0xffffffff };

你可以通过以下方式设置第一个成员以外的其他成员:

U_U32_F u = { .f = 42.0 };

16
请注意,第二个例子是C99的一个特性,不是所有编译器都支持。 - Michael Burr
只是另一个注意事项,第二个也是有效的C++20。 - Benjamin Buch

4
请注意,针对每个成员的联合初始化在C99之前的编译器上不起作用,而这种编译器数量令人沮丧。例如,当前的Microsoft C编译器不支持它。(我模糊地记得它甚至不支持第一个成员的初始化,这可以追溯到K&R II,但我可能记错了。)

4
微软公司基本放弃了C语言,推荐使用C++(或者更好的选择:C#);我对MinGW感到非常满意,现在gcc-4.4已经发布了;如果你正在寻找一个免费的编译器,未来Clang/LLVM也可能是一个可行的选择。 - Christoph
2
微软的C编译器不遵循任何特定标准(据我所知,以前也没有,将来也不会)。 - Mathieu K.

3

Try U_U32_F u = {0xffffffff};


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接