在代码的许多地方,我看过这样的代码:
typedef struct Name_of_Struct{
//Things that the struct holds
} Name_of_Struct;
我似乎不明白为什么会这样宣言?为什么结构typedef
'编辑自己的名字?是不是在说typedef Name_of_struct Name_of_Struct;
?我知道这样的声明背后肯定有一些原因,因为这样的代码实例可以在SDL等良好且使用频繁的代码库中看到。
答案 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编程语言不会自动为用户创建的类型创建类型名称(例如,enum
,struct
,union
)。近几年我没有写过很多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;
似乎有些程序员已经用这两种方法制作了弗兰肯斯坦。