6
Ç聯盟多態性考慮以下幾點:內的數組
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]。 – betabandido
'transparent_union'僅在向函數傳遞參數時透明。海灣合作委員會的文件是非常明確的。 –
您可以隨時添加.a或.b,但它會打敗您的目的嗎? –