7

次の場合:

typedef struct{
...
...
} A;

typedef struct{
...
... 
} B;

typedef union __attribute__((transparent_union)) {
    A a;
    B b;
} C;

関数を宣言すると

myMethod(C){
...
}

以下は、明示的なキャストなしで合法です。

A myA;
B myB;

meMethod(myA);
myMethod(myB);

(from: " c unions and polymorphism ")

ただし、次のことが許可されないのはなぜですか。

C cArray[2];
c[0]=myA;
c[1]=myB;

これにより、明示的なキャストなしで互換性のないタイプエラーが発生します。明示的なキャストを回避する方法はありますか?

4

1 に答える 1

3

GCCドキュメントには次のように記載されています。

共用体型定義に付加されたこの属性は、その共用体型を持つ関数パラメーターが、その関数への呼び出しを特別な方法で処理することを示します。

つまり、透過性は関数パラメーターにのみ適用されます。

于 2012-05-23T15:24:57.877 に答える