2012-05-23 41 views
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; 

這給出了一個不兼容的類型錯誤沒有明確的鑄造。有什麼辦法可以避免顯式投射嗎?

+1

請編輯你的問題,因爲它不是合法的C。 C [2] cArray應該是C cArray [2]。那麼c [0]和c [1]應該是cArray [0]和cArray [1]。 – betabandido

+3

'transparent_union'僅在向函數傳遞參數時透明。海灣合作委員會的文件是非常明確的。 –

+0

您可以隨時添加.a或.b,但它會打敗您的目的嗎? –

回答

3

GCC documentation狀態:

該屬性,連接到聯合類型定義,表示 具有聯合類型的任何函數參數將導致在一個特殊的方式進行處理,以該 函數調用。

換句話說,透明度僅適用於功能參數。