【问题标题】:Can a union be initialized in the declaration?可以在声明中初始化联合吗?
【发布时间】:2012-08-15 07:55:46
【问题描述】:

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

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 typdef'ed 但未在示例中显示。

标签: c initialization declaration unions


【解决方案1】:

使用初始化列表:

U_U32_F u = { 0xffffffff };

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

U_U32_F u = { .f = 42.0 };

【讨论】:

  • 请注意,第二个示例是 C99 功能,并非所有编译器都支持。
【解决方案2】:

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

【讨论】:

  • 微软或多或少地放弃了 C 并希望你使用 C++(甚至更好:C#);现在 gcc-4.4 出来了,我对 MinGW 很满意;将来,如果您正在寻找免费的编译器,Clang/LLVM 可能也是一个可行的选择
  • Microsoft C 编译器不(据我所知,不,也不会)符合任何特定标准。
【解决方案3】:

试试U_U32_F u = {0xffffffff};

【讨论】:

    猜你喜欢
    • 2012-07-18
    • 2012-02-11
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 2019-05-02
    • 2020-04-19
    • 1970-01-01
    • 2023-02-02
    相关资源
    最近更新 更多