2010-01-27 14 views
25

Par exemple, disons que nous avons une unionUne union peut-elle être initialisée dans la déclaration?

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

Lorsqu'une variable de ce type d'union est déclarée, est-il possible de définir une valeur initiale?

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

Qu'est-ce que u32? ..... –

+0

@Prasoon Mes excuses . J'avais u32 typdef'ed mais pas montré dans l'exemple. – semaj

Répondre

29

Utilisez une liste d'initialiseur:

U_U32_F u = { 0xffffffff }; 

Vous pouvez définir d'autres membres que le premier via

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

Juste une note que le 2ème exemple est une fonctionnalité C99 qui n'est pas supporté par tous les compilateurs. –

3

Essayez U_U32_F u = {0xffffffff};

3

Notez que par membre initialisation du syndicat doesn Ne travaillez pas sur des compilateurs pré-C99, dont le nombre est déprimant. Le compilateur Microsoft C actuel ne le prend pas en charge, par exemple. (Je rappelle vaguement qu'il ne supporte même pas l'initialisation du premier membre, qui remonte à K & R II, mais j'ai peut-être tort à ce sujet.)

+4

Microsoft plus ou moins abandonné C et veut que vous utilisiez C++ (ou mieux encore: C#); Je suis assez content avec MinGW, maintenant que gcc-4.4 est sorti; à l'avenir, Clang/LLVM pourrait être une alternative viable si vous cherchez un compilateur gratuit. – Christoph

+0

Le compilateur Microsoft C n'est pas (et à ma connaissance n'a pas, et ne sera pas) conforme à un standard particulier. –