- 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.