【发布时间】:2012-05-23 15:01:01
【问题描述】:
鉴于以下情况:
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;
这会在没有显式转换的情况下给出不兼容的类型错误。有什么办法可以避免显式转换?
【问题讨论】:
-
请编辑您的问题,因为它不是合法的 C。 C[2] cArray 应该是 C cArray[2]。那么c[0]和c[1],应该是cArray[0]和cArray[1]。
-
transparent_union仅在将参数传递给函数时是透明的。 GCC 文档对此非常明确。 -
您总是可以只添加 .a 或 .b,但这违背了您的目的,对吧?
标签: arrays gcc polymorphism unions