なぜCユニオンが必要なのか?質問する

なぜCユニオンが必要なのか?質問する

ユニオンはいつ使用すべきでしょうか? なぜ必要なのでしょうか?

ベストアンサー1

ユニオンは、整数と浮動小数点数のバイナリ表現を変換するためによく使用されます。

union
{
  int i;
  float f;
} u;

// Convert floating-point bits to integer:
u.f = 3.14159f;
printf("As integer: %08x\n", u.i);

これは C 標準によれば技術的には未定義の動作ですが (最後に書き込まれたフィールドのみを読み取ることになっています)、事実上どのコンパイラでも明確に定義された方法で動作します。

ユニオンは、構造体に、含まれるオブジェクトの型を示すタグを付け、可能な型を結合することで、C で疑似多態性を実装するために使用されることもあります。

enum Type { INTS, FLOATS, DOUBLE };
struct S
{
  Type s_type;
  union
  {
    int s_ints[2];
    float s_floats[2];
    double s_double;
  };
};

void do_something(struct S *s)
{
  switch(s->s_type)
  {
    case INTS:  // do something with s->s_ints
      break;

    case FLOATS:  // do something with s->s_floats
      break;

    case DOUBLE:  // do something with s->s_double
      break;
  }
}

これにより、 のサイズはstruct S28 バイトではなく 12 バイトのみになります。

おすすめ記事