4

重複の可能性:
宣言でユニオンを初期化できますか?

私はインターネット全体を調べましたが、コンパイル時に構造体内でユニオンの値を設定する方法の例を見つけることができません。皆さんが私を助けてくれることを願っています。たとえば、単純な構造体は次のようになります。

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またはintのいずれかであり、「elementType」を使用すると、どちらであるかを知ることができます。

私はあなたが実行時にそれを設定できることを知っています:

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

しかし、私は構造体を使って上記のようにそれを行う方法を見つけていません。

前もって感謝します。

編集:これは重複しています。私は「初期化」という言葉を使うべきだったのですが、それは私をその言葉に直結させたでしょう。私のグーグルフーは今日弱いに違いない。ありがとう。

4

1 に答える 1

3

どうですか:

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

または多分

myStruct structEx = {
    .elementType = 0,
    .value.valueInt = 42
};
于 2012-07-04T18:38:46.160 に答える