2016-10-26 6 views
5

同じタイプの2つのメンバーab(たとえばint)の2つのメンバーで構成されるユニオンuがあるとします。同じタイプのユニオンメンバー

union u{ 
    int a,b; 
    char c; 
}; 

私はaに書き込む場合は、値で関数に渡して、関数がa値を得ることを期待し、bから読み込み、すべての問題がabを考慮すると、あるだろうが、同じ型を持っていますか?メンバは、メンバの書き込みを正確に反映させる必要がありますか?

+3

C11ドラフトN1548は問題がないと言うかもしれません。私は確かに言うことができません。それでも読書。脚注:「95」ユニオンオブジェクトの内容を読み取るために使用されたメンバが、最後に使用されたメンバと同じでない場合は、オブジェクトに値を格納します。値のオブジェクト表現の適切な部分は、 として再解釈されます。 6.2.6で記述されているような新しいタイプのオブジェクト表現(時には '' punning ''と呼ばれるプロセス)。これはトラップ表現かもしれない」 – Ryan

答えて

4

はい、問題ありません。

標準(C11ドラフト)は言う:

組合が共通の初期 配列を共有するいくつかの構造が含まれている場合は、[...](下記参照)、および共用体オブジェクトは、現在の1が含まれている場合 これらの構造は、労働組合の完成型の宣言が 見える

ここでは、2つの整数は(非常にSIMと考えることができるされていることを任意の場所にそれらのいずれか の共通の初期の部分を検査することが許可されます同一の初期配列を共有している。

さえもあります、ということを無視:

メンバーは、共用体オブジェクトの内容を読み取るために使用される場合は、適切な 、オブジェクトに値を格納するために使用される最後のメンバーとして 同じではありません値のオブジェクト表現の一部はかなり安全であるintintとして再解釈新しいタイプ

で オブジェクト表現として再解釈されます。 :)

関連する問題