2010-01-27 13 views
25

Per esempio, dire che abbiamo un sindacatoÈ possibile inizializzare una unione nella dichiarazione?

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

Quando viene dichiarata una variabile di questo tipo unione, c'è un modo per impostare un valore iniziale?

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

Che cos'è u32? ..... –

+0

@Prasoon Le mie scuse . Ho avuto u32 typdef'ed ma non mostrato nell'esempio. – semaj

risposta

29

Utilizzare un lista di inizializzazione:

U_U32_F u = { 0xffffffff }; 

È possibile impostare gli altri membri che il primo tramite

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

Solo una nota che il secondo esempio è una funzione C99 che non è supportata da tutti i compilatori. –

3

Prova U_U32_F u = {0xffffffff};

3

Nota che l'inizializzazione per-sindacalista doesn lavorare su compilatori pre-C99, di cui esiste un numero deprimente. Il compilatore Microsoft C corrente non lo supporta, ad esempio. (Ricordo vagamente che non supporta nemmeno l'inizializzazione del primo membro, che risale a K & R II, ma potrei sbagliarmi.)

+4

Microsoft ha più o meno abbandonato C e vuole usare C++ (o ancora meglio: C#); Sono abbastanza contento di MinGW, ora che gcc-4.4 è fuori; in futuro, Clang/LLVM potrebbe essere un'alternativa valida anche se stai cercando un compilatore gratuito – Christoph

+0

Il compilatore Microsoft C non lo fa (e, a mia conoscenza, non è, né lo sarà) conforme ad alcun particolare standard. –

Problemi correlati