关于c ++:为什么结构类型定义为自己的名字?

Why are structures typedef'ed to their own names?

本问题已经有最佳答案,请猛点这里访问。

在代码的许多地方,我都看到过这样的代码:

1
2
3
typedef struct Name_of_Struct{
    //Things that the struct holds
} Name_of_Struct;

我好像不明白为什么要这样做?为什么结构typedef被命名为自己的名称?这不是说"以东"〔1〕吗?我知道这样的声明背后一定有一些原因,比如在SDL这样的良好且高度使用的代码库中可以看到这样的代码实例。


在C++中,你不必这样做。

但是在C语言中,这样做是为了保存一些输入

1
2
3
4
5
struct Name_of_Struct{
    //Things that the struct holds
} ;

struct Name_of_Struct ss; // If not typedef'ed you'll have to use `struct`

但有typedef

1
2
3
4
5
typedef struct Name_of_Struct{
    //Things that the struct holds
} Name_of_Struct;

Name_of_Struct ss ; // Simply just use name of struct, avoid struct everywhere

将名称指定两次是多余的。

最初在C中使用了typedef,因此您不需要一直使用struct来限定名称。在C++中,您可以简单地命名EDCOX1 OR 1。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// C method

struct MyStruct {};

// need to qualify that name with `struct`

struct MyStruct s;

// C method avoiding typing `struct` all the time

typedef struct {} MyStruct;

MyStruct s; // no need to use `struct`

// C++ way

struct MyStruct {};

MyStruct s;

似乎有些程序员已经将这两种方法结合起来了。


代码可能在C和C++之间共享。C编程语言不会自动为用户创建的类型(例如,enumstructunion)创建类型名。近年来我没有写过很多C,所以这可能在C99中有所改变。