在编译时设置union的值

时间:2012-07-04 18:30:04

标签: c unions

  

可能重复:
  Can a union be initialized in the declaration?

我看过整个互联网,无法找到如何在编译时在结构中设置联合值的示例,我希望你们和gals可以帮助我。例如,一个简单的结构将是:

typedef enum {
     typeFloat,
     typeInt
} Type;

typedef struct myStruct { 
     Type     elementType;
     int      valueInt;
     float    valueFloat;
} myStruct;

然后你可以用:

声明一个局部变量
myStruct structEx = {typeInt, 349, 0};

myStruct structEx = {typeFloat, 0, 349.349};

如果将结构声明为:

,您将如何做同样的事情
typedef struct myStruct {
     Type     elementType;
     union value {
          int     valueInt;
          float   valueFloat;
     } value;   
} myStruct;

“value”将是一个float或一个带有“elementType”的int,允许它知道它是什么。

我知道您可以在运行时使用以下命令设置它:

myStruct structEx;
structEx.elementType = typeInt;
structEx.value.valueInt = 349;

但我还没有找到一种方法来执行上面的结构。

提前致谢。

编辑:这是重复的。我应该一直使用“初始化”这个词,它会直接带我去那个。我的Google-Fu今天一定很弱。感谢。

1 个答案:

答案 0 :(得分:3)

怎么样:

myStruct structEx = {
    .elementType = 0,
    .value = {
        .valueInt = 42
    }
};

或者

myStruct structEx = {
    .elementType = 0,
    .value.valueInt = 42
};