I don’t think I fundamentally understand what an enum is, and when to use it.
For example:
typedef enum { kCircle, kRectangle, kOblateSpheroid } ShapeType;
What is really being declared here?
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
Three things are being declared here: an anonymous enumerated type is declared,
ShapeTypeis being declared a typedef for that anonymous enumeration, and the three nameskCircle,kRectangle, andkOblateSpheroidare being declared as integral constants.Let’s break that down. In the simplest case, an enumeration can be declared as
This declares an enumeration with the tag
tagname. In C and Objective-C (but not C++), any references to this must be preceded with theenumkeyword. For example:In order to avoid having to use the
enumkeyword everywhere, a typedef can be created:This can be simplified into one line:
And finally, if we don’t need to be able to use
enum tagnamewith theenumkeyword, we can make theenumanonymous and only declare it with the typedef name:Now, in this case, we’re declaring
ShapeTypeto be a typedef’ed name of an anonymous enumeration.ShapeTypeis really just an integral type, and should only be used to declare variables which hold one of the values listed in the declaration (that is, one ofkCircle,kRectangle, andkOblateSpheroid). You can assign aShapeTypevariable another value by casting, though, so you have to be careful when reading enum values.Finally,
kCircle,kRectangle, andkOblateSpheroidare declared as integral constants in the global namespace. Since no specific values were specified, they get assigned to consecutive integers starting with 0, sokCircleis 0,kRectangleis 1, andkOblateSpheroidis 2.