阵列中的C联合多态性

时间:2012-05-23 15:01:02

标签: arrays gcc polymorphism unions

鉴于以下内容:

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);

(来自:“c unions and polymorphism”)

但是,为什么不允许以下内容:

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

这会在没有显式强制转换的情况下产生不兼容的类型错误。有没有办法避免显式铸造?

1 个答案:

答案 0 :(得分:3)

GCC documentation州:

  

此属性附加到联合类型定义,表示该属性   任何具有该联合类型的函数参数都会导致调用该函数   以特殊方式对待的功能。

换句话说,透明度仅适用于函数参数。