共用体型へのキャストは、共用体メンバーを
、それが所属する共用体と同じ型にキャストする機能です。
そのようなキャストは、他のキャストとは異なり、左辺値を生成しません。
このフィーチャーは C99 に対する直交拡張としてサポートされており、
GNU C で開発されたプログラムの移植を容易にするためにインプリメントされています。
共用体型のメンバーとして明示的に存在する型だけが、その共用体型にキャストすることができます。 キャストは、共用体型のタグ、または typedef 式で宣言された共用体型名のいずれかを使用することができます。 指定される型は、完全な共用体型でなければなりません。 無名共用体型は、タグまたは型名を持つ場合、共用体型へのキャストで使用 することができます。共用体に、同じ型のビット・フィールド・メンバーが含まれるが、必ずしも 同じ長さではない場合、ビット・フィールドを共用体型にキャストすること ができます。
ネストされた共用体へのキャストも認められています。以下の例では、double 型 dd は、ネストされた共用体 u2_t にキャストすることができます。
int main() { union u_t { char a; short b; int c; union u2_t { double d; }u2; }; union u_t U; double dd = 1.234; U.u2 = (union u2_t) dd; // Valid. printf("U.u2 is %f¥n", U.u2); }
この例の出力は次のようになります。
U.u2 is 1.234