Cでの使用を理解するのが困難union
です。この件について SO に関する多くの投稿を読みました。union
しかし、構造体を使用して同じことが達成できる場合に、なぜ好ましいのかについては説明していません。
K&Rより引用
コンパイラのシンボル テーブル マネージャーに見られるような例として、定数が int、float、または文字ポインターであるとします。特定の定数の値は、適切な型の変数に格納する必要がありますが、値が同じ量のストレージを占有し、その型に関係なく同じ場所に格納される場合、テーブル管理に最も便利です。これが、複数の型のいずれかを正当に保持できる単一の変数を結合する目的です。構文は構造に基づいています。
union u_tag {
int ival;
float fval;
char *sval;
} u;
使用法は
if (utype == INT)
printf("%d\n", u.ival);
if (utype == FLOAT)
printf("%f\n", u.fval);
if (utype == STRING)
printf("%s\n", u.sval);
else
printf("bad type %d in utype\n", utype);
構造体を使用して同じことを実装できます。何かのようなもの、
struct u_tag {
utype_t utype;
int ival;
float fval;
char *sval;
} u;
if (u.utype == INT)
printf("%d\n", u.ival);
if (u.utype == FLOAT)
printf("%f\n", u.fval);
if (u.utype == STRING)
printf("%s\n", u.sval);
else
printf("bad type %d in utype\n", utype);
これは同じではありませんか?どのような利点union
がありますか?
何かご意見は?