2017-10-14 77 views
1

我想用typedef和enum。我有两条线,下面两条线是否有区别?typedef和enum有什么区别

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

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

回答

2
  • 第一行定义了一个没有标签的enum,并给它一个名字STYPE
  • 第二行定义了一个名为enum称为STYPE

不同的是,第一enum不有一个枚举标签,而第二个呢。换句话说,下面两线将编译enum STYPE

STYPE s1; 
enum STYPE s2; 

而只有第一线将编译为typedef enum ... STYPE

注:使用typedef不是在C++中常见的,因为enum自动定义类型名称。该结构在C中更常见,其中enum而不是typedef必须仅用作标签,即与enum关键字一起使用。最后,该构建体也用于C:

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

它定义了一个标记enum,并且限定类型名称为它。这个声明在C++中也是允许的,但它与你的第二个声明没有区别。