typedef struct和enum,为什么?

ani*_*nio 5 c++ enums struct

可能重复:
struct,typedef struct的目的,在C++
typedef struct vs struct definitions中

在我维护的代码中,我经常看到以下内容:

typedef enum { blah, blah } Foo;
typedef struct { blah blah } Bar;
Run Code Online (Sandbox Code Playgroud)

代替:

enum Foo { blah, blah };
struct Bar { blah blah };
Run Code Online (Sandbox Code Playgroud)

我总是使用后者,这是我第一次看到前者.所以问题是为什么一个人使用一种风格而不是另一种风格.有什么好处?它们在功能上是否相同?我相信他们但并非100%肯定.

Meh*_*dad 9

在C++中,这无关紧要.

在C中,structs,enums和unions位于不同的"名称空间"中,这意味着它们的名称可能与变量名称冲突.如果你说

struct S { };
Run Code Online (Sandbox Code Playgroud)

所以你可以这样说

struct S S;
Run Code Online (Sandbox Code Playgroud)

这意味着它struct S是数据类型,并且S是变量名称.你不能说

S myStruct;
Run Code Online (Sandbox Code Playgroud)

在C中,如果Sstruct(而不是类型名称),所以人们过去常常typedef一直避免说话struct.