在C ++中声明枚举的标准方法似乎是:
enum <identifier> { <list_of_elements> };
但是,我已经看到了一些声明:
typedef enum { <list_of_elements> } <identifier>;
如果存在,它们之间有什么区别?哪一个是正确的?
答案 0 :(得分:19)
C兼容性。
在C中,union
,struct
和enum
类型必须与之前的相应关键字一起使用:
enum x { ... };
enum x var;
在C ++中,这不是必需的:
enum x { ... };
x var;
所以在C语言中,懒惰的程序员经常使用typedef
来避免重复:
typedef enum x { ... } x;
x var;
答案 1 :(得分:4)
我认为不同之处在于标准C中使用
enum <identifier> { list }
你必须使用
来调用它enum <identifier> <var>;
与其周围的typedef一样,您只需使用
即可调用它<identifier> <var>;
但是,我不认为这在C ++中很重要
答案 2 :(得分:3)
与@Chris Lutz所说的相似:
在old-C语法中,如果您只是声明:
enum myEType { ... };
然后你需要将变量声明为:
enum myEType myVariable;
但是,如果您使用typedef:
typedef enum { ... } myEType;
然后,您可以在使用类型时跳过enum-keyword:
myEType myVariable;
C ++和相关语言已经废除了这个限制,但是在纯C环境中或者由C程序员编写时,仍然可以看到这样的代码。