给定以下内容:

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;

这给出了不兼容的类型错误,而没有显式的强制转换。有什么方法可以避免显式强制转换?

最佳答案

GCC documentation指出:



换句话说,透明性仅适用于功能参数。

关于arrays - 数组中的C联合多态性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10722647/

10-12 01:50