使用和不使用'typedef'声明枚举之间有什么区别?

时间:2010-04-28 21:09:45

标签: c++ enums declaration typedef

在C ++中声明枚举的标准方法似乎是:

enum <identifier> { <list_of_elements> };

但是,我已经看到了一些声明:

typedef enum { <list_of_elements> } <identifier>;

如果存在,它们之间有什么区别?哪一个是正确的?

3 个答案:

答案 0 :(得分:19)

C兼容性。

在C中,unionstructenum类型必须与之前的相应关键字一起使用:

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程序员编写时,仍然可以看到这样的代码。