2010-01-27 4 views
25

Zum Beispiel, sagen wirKann eine Union in der Deklaration initialisiert werden?

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

Wenn eine Variable dieser Union Typ deklariert ist eine Vereinigung haben, ist es eine Möglichkeit, einen Anfangswert zu setzen?

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

Was ist u32? ..... –

+0

@Prasoon Entschuldigung . Ich hatte u32 typdef'ed aber im Beispiel nicht gezeigt. – semaj

Antwort

29

eine Initialisiererliste Verwendung:

U_U32_F u = { 0xffffffff }; 

Sie andere Mitglieder als die erste über

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

Nur eine Anmerkung, dass das zweite Beispiel eine C99-Funktion ist, die nicht von allen Compilern unterstützt wird. –

3

Versuchen einstellen U_U32_F u = {0xffffffff};

3

Beachten Sie, dass pro-Mitgliedsverband Initialisierung Doesn Ich arbeite nicht an Pre-C99-Compilern, von denen es eine deprimierende Zahl gibt. Der aktuelle Microsoft C-Compiler unterstützt es beispielsweise nicht. (Ich erinnere mich vage daran, dass es nicht einmal die Initialisierung des ersten Teils unterstützt, die auf K & R II zurückgeht, aber ich könnte mich darin irren.)

+4

Microsoft mehr oder weniger aufgegeben C und möchte, dass Sie C++ verwenden (oder noch besser: C#); Ich bin ziemlich zufrieden mit MinGW, jetzt da gcc-4.4 raus ist; in der Zukunft könnte Clang/LLVM auch eine brauchbare Alternative sein, wenn Sie nach einem kostenlosen Compiler suchen. – Christoph

+0

Der Microsoft C-Compiler entspricht (und nach meinem Wissen hat er nicht und wird nicht) einem bestimmten Standard. –

Verwandte Themen