2011-01-17 8 views
6

Warum wird typedef im folgenden Code benötigt?Warum wird Typedef mit Aufzählungstyp verwendet?

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

warum nicht einfach den Code unten haben und den typedef entfernen?

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

Namen, die mit einem Unterstrich gefolgt von einem Großbuchstaben beginnen, sind in jedem Kontext reserviert (es werden neue C-Schlüsselwörter verwendet: zB '_Bool',' _Complex' aus C99, '_Atomic',' _Generic' aus C1x) - verwenden ein hinterer Unterstrich statt ... – Christoph

Antwort

11

Wenn Sie nicht typedef Ihre Enum tun, werden Sie in Ihren anderen Code haben, um es als enum Coordinate statt nur Coordinate, selbst zu verweisen, obwohl Sie wissen Coordinate eine Enumeration ist. Es ist nur, um die Redundanz des enum Schlüsselwortes zu eliminieren, wenn ich darauf verweise, denke ich.

Um es deutlicher zu machen, ist hier, wie es aussehen würde, wenn Sie typedef getrennt es von ihm erklärt:

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; 

Dies gilt auch für C structs und Aufzählungen (Obj-C Aufzählungen sind nur ohnehin C Aufzählungen) .

Verwandte Themen