为什么结构类型有自己的名字?

时间:2014-09-28 14:22:43

标签: c++ typedef

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

typedef struct Name_of_Struct{
    //Things that the struct holds
} Name_of_Struct;

我似乎不明白为什么会这样宣言?为什么结构typedef'编辑自己的名字?是不是在说typedef Name_of_struct Name_of_Struct;?我知道这样的声明背后肯定有一些原因,因为这样的代码实例可以在SDL等良好且使用频繁的代码库中看到。

3 个答案:

答案 0 :(得分:4)

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

但是在C中这样做是为了节省一些打字

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

指定名称两次是多余的。

最初在C中使用typedef,因此您无需始终使用struct限定名称。在C ++中,您只需命名struct

// 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;

似乎有些程序员已经用这两种方法制作了弗兰肯斯坦。