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;

这会在没有显式转换的情况下给出不兼容的类型错误。有什么办法可以避免显式转换?

4

1 回答 1

3

GCC 文档指出:

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

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

于 2012-05-23T15:24:57.877 回答