C语言中联合体在数组中的多态性

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

(来自: "c unions and polymorphism")

然而,为什么下面的方式不被允许:

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

如果没有显式转换,这会导致不兼容类型错误。有没有什么方法可以避免显式转换?


1
请编辑您的问题,因为它不是合法的C语言。C[2]应该是C cArray[2]。然后c[0]和c[1]应该是cArray[0]和cArray[1]。 - betabandido
3
transparent_union 只有在向函数传递参数时才是透明的。GCC文档对此非常明确。 - n. m.
你总可以添加 .a 或 .b,但这不符合你的目的,对吧? - Michael Dorgan
1个回答

3

GCC文档中指出:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接