2010-02-17 47 views
1

我已經制作了一個可以在LISP中使用的整數和指針等結構。如何初始化C中的匿名結構的第二個成員?

指針至少8字節對齊,所以tag = 0。 整數是29位,標記爲1. 其他類型具有不同的標記值。

struct Atom{ 
    union{ 
    Pair    *pair; 
    struct{ 
     unsigned  tag  :3; 
     union{ 
     int   val  :29; 
     char   ch; 
     struct{ 
      int   mant :21; 
      Exp   exp  :8; 
     }; 
     }; 
    }; 
    }; 
}; 

我想對它們進行不同的初始化。

爲指針:

Atom aPair = {{.pair=0}}; // works 

Atom aPair = {{0}}; //works 

這樣做是因爲,我認爲,GCC假設我要初始化聯盟的第一個成員。

我也想初始化一個整數 - 這樣的事情:

Atom anInt={{ {.tag=1,{.val=0} } }}; 

我知道這是不是標準的C,但是這是不可能的,在GCC匿名結構?

+0

有一個答案,我評論 - 它去了哪裏? 有人建議我嘗試Atom anInt = {。tag = 1,.val = 0}; 它沒有工作,但它是我沒有嘗試過的東西,我讚賞他們花時間閱讀我的問題並提出建議。 – philcolbourn 2010-02-17 11:22:19

回答

2

這是一個known bug

...已在gcc 4.6中修復(使用struct Atom anInt={{ .tag=1, {.val=0} }};)。

+0

謝謝。我不認爲編譯器可能有錯。 – philcolbourn 2010-02-17 12:16:04