阵列中的C联合多态性

AFS*_*AFS 7 arrays polymorphism gcc unions

鉴于以下内容:

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

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

typedef union __attribute__((transparent_union)) {
    A a;
    B b;
} C;
Run Code Online (Sandbox Code Playgroud)

如果我声明一个函数

myMethod(C){
...
}
Run Code Online (Sandbox Code Playgroud)

以下是合法的,没有明确的转换:

A myA;
B myB;

meMethod(myA);
myMethod(myB);
Run Code Online (Sandbox Code Playgroud)

(来自:" c unions and polymorphism ")

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

C cArray[2];
c[0]=myA;
c[1]=myB;
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*nan 3

GCC文档指出:

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

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