2011-01-17 13 views
6

¿Por qué se necesita typedef en el código siguiente?¿Por qué se usa typedef con el tipo enum?

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

¿por qué no acaba de tener el código siguiente y eliminar el typedef?

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

nombres que comienzan con un guión bajo y una letra mayúscula están reservados en cualquier contexto (es lo que usan las nuevas palabras clave C: ej. '_Bool',' _Complex' de C99, '_Atomic',' _Generic' de C1x) - use un guión bajo final en su lugar ... – Christoph

Respuesta

11

Si aún no typedef su enumeración, en su otro código que tiene que referirse a ella como enum Coordinate en lugar de sólo Coordinate, a pesar de que sabe Coordinate es una enumeración. Es solo para eliminar la redundancia de la palabra clave enum cuando me refiero a ella, supongo.

para hacerlo más claro, esto es lo que se vería como si typedef de forma independiente de la que se declara que:

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; 

Esto también se aplica a las estructuras de C y enumeraciones (Obj-C enumeraciones son sólo enumeraciones C de todos modos) .