2010-01-27 87 views
25

例如,假設我們有一個工會聯盟是否可以在聲明中初始化?

typedef union { 
unsigned long U32; 
float f; 
}U_U32_F; 

當這個聯盟類型的變量聲明,是有辦法設置初始值?

U_U32_F u = 0xffffffff; // Does not work...is there a correct syntax for this? 
+0

什麼是u32?..... – 2010-01-27 17:33:48

+0

@Prasoon我的歉意。我有u32 typdef'ed但在示例中沒有顯示。 – semaj 2010-01-27 18:44:08

回答

29

使用的初始化列表:

U_U32_F u = { 0xffffffff }; 

您可以通過

U_U32_F u = { .f = 42.0 }; 
+14

請注意,第二個示例是C99功能,並非所有編譯器都支持。 – 2010-01-27 20:04:20

3

設置其他成員比第一次嘗試U_U32_F u = {0xffffffff};

3

注意,每名成員組成的聯合初始化沒有按不適用於C99之前的編譯器,其中有一個令人沮喪的編號。例如,目前的Microsoft C編譯器不支持它。 (我隱約記得它甚至不支持第一個成員初始化,這可以追溯到K & R II,但我可能是錯誤的。)

+4

微軟或多或少拋棄了C,並希望你使用C++(或者更好:C#);我對MinGW非常滿意,現在gcc-4.4已經出來了;在未來,如果你正在尋找一個免費的編譯器,Clang/LLVM可能是一個可行的替代方案。 – Christoph 2010-01-27 23:22:31

+0

Microsoft C編譯器沒有(並且據我所知還沒有,也不會)符合任何特定的標準。 – 2016-02-10 09:24:44