2011-01-17 17 views
6

perché è necessario typedef nel codice qui sotto?perché viene usato typedef con tipo enum?

typedef enum _Coordinate { 
    CoordinateX = 0, ///< X axis 
    CoordinateY = 1, ///< Y axis 
    CPCoordinateZ = 2 ///< Z axis 
} Coordinate; 

perché non basta avere il codice qui sotto e rimuovere il typedef?

enum Coordinate { 
    CoordinateX = 0, ///< X axis 
    CoordinateY = 1, ///< Y axis 
    CPCoordinateZ = 2 ///< Z axis 
}; 
+0

nomi che iniziano con un trattino basso seguito da una lettera maiuscola sono riservati in qualsiasi contesto (è ciò che usano le nuove parole chiave C: ad esempio '_Bool',' _Complex' da C99, '_Atomic',' _Generic' da C1x) - usa un trattino basso invece ... – Christoph

risposta

11

Se non typedef tuo enum, in altro codice è necessario fare riferimento ad esso come enum Coordinate invece di Coordinate, anche se si sa Coordinate è un enum. È solo per eliminare la ridondanza della parola chiave enum quando ci si riferisce ad esso, immagino.

per renderlo più chiaro, ecco quello che potrebbe apparire come se si typedef separatamente da dichiarandolo:

enum _Coordinate { 
    CoordinateX = 0, 
    CoordinateY = 1, 
    CPCoordinateZ = 2 
}; 

// You map the enum type "enum _Coordinate" to a user-defined type "Coordinate" 
typedef enum _Coordinate Coordinate; 

Questo vale anche per C le strutture e le enumerazioni (Obj-C enumerazioni sono solo enumerazioni C in ogni caso) .

Problemi correlati