2017-10-14 9 views
1

J'essaie d'utiliser typedef et enum. J'ai deux lignes. Y a-t-il une différence entre deux lignes suivantes?Quelle est la différence entre typedef et enum

typedef enum {UNDEFINED, POINT2D, POINT3D, CIRCLE, SQUARE, RECTANGLE, SPHERE} STYPE 

enum STYPE {UNDEFINED, POINT2D, POINT3D, CIRCLE, SQUARE, RECTANGLE, SPHERE} 

Répondre

2
  • La première ligne définit un enum sans étiquette, et lui donne un nom STYPE
  • deuxième ligne définit un nom enum appelé STYPE

La différence est que le premier enum ne le fait pas avoir une étiquette enum, tandis que le second fait. En d'autres termes, les deux lignes ci-dessous compileront pour enum STYPE

STYPE s1; 
enum STYPE s2; 

alors que seule la première ligne pour la compilation typedef enum ... STYPE.

Note: L'utilisationtypedef est pas commun en C++, car enum définit automatiquement un nom de type. La construction est plus commune dans C, où enum sans typedef doit être utilisé uniquement comme une étiquette, c'est-à-dire avec le mot-clé enum. Enfin, cette construction est également utilisé dans C:

typedef enum STYPE {UNDEFINED, POINT2D, POINT3D, CIRCLE, SQUARE, RECTANGLE, SPHERE} STYPE; 

Il définit un taggés enum et définit un nom de type pour elle. Cette déclaration est également autorisée en C++, mais elle n'est pas différente de votre seconde déclaration.