使用和不使用“typedef”声明枚举有什么区别?

发布于 2024-08-30 15:32:50 字数 254 浏览 5 评论 0原文

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

enum <identifier> { <list_of_elements> };

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

typedef enum { <list_of_elements> } <identifier>;

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

The standard way of declaring an enum in C++ seems to be:

enum <identifier> { <list_of_elements> };

However, I have already seen some declarations like:

typedef enum { <list_of_elements> } <identifier>;

What is the difference between them, if it exists? Which one is correct?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

还在原地等你 2024-09-06 15:32:51

C 兼容性。

在 C 中,unionstructenum 类型必须在它们之前使用适当的关键字:

enum x { ... };

enum x var;

在 C++ 中,这是不必要的:

enum x { ... };

x var;

所以在 C 语言中,懒惰的程序员经常使用 typedef 来避免重复:

typedef enum x { ... } x;

x var;

C compatability.

In C, union, struct and enum types have to be used with the appropriate keyword before them:

enum x { ... };

enum x var;

In C++, this is not necessary:

enum x { ... };

x var;

So in C, lazy programmers often use typedef to avoid repeating themselves:

typedef enum x { ... } x;

x var;
一杆小烟枪 2024-09-06 15:32:51

我相信区别在于,在标准 C 中,如果你使用

enum <identifier> { list }

你将不得不使用它来调用它

enum <identifier> <var>;

,而与它周围的 typedef 一样,你可以使用它来调用它

<identifier> <var>;

但是,我认为这在 C++ 中并不重要

I believe the difference is that in standard C if you use

enum <identifier> { list }

You would have to call it using

enum <identifier> <var>;

Where as with the typedef around it you could call it using just

<identifier> <var>;

However, I don't think it would matter in C++

一瞬间的火花 2024-09-06 15:32:51

类似于 @Chris Lutz 所说的:

在旧的 C 语法中,如果您简单地声明:

enum myEType { ... };

然后您需要将变量声明为:

enum myEType myVariable;

但是,如果您使用 typedef:

typedef enum { ... } myEType;

然后你可以在使用类型时跳过枚举关键字:

myEType myVariable;

C++ 和相关语言已经取消了这一限制,但在纯 C 环境中或由 C 程序员编写的代码中仍然常见这样的代码。

Similar to what @Chris Lutz said:

In old-C syntax, if you simply declared:

enum myEType {   ... };

Then you needed to declare variables as:

enum myEType myVariable;

However, if you use typedef:

typedef enum {   ... } myEType;

Then you could skip the enum-keyword when using the type:

myEType myVariable;

C++ and related languages have done away with this restriction, but its still common to see code like this either in a pure C environment, or when written by a C programmer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文