所以我正在查看this C tutorial,我找到了这些代码行:
struct Monster {
Object proto;
int hit_points;
};
typedef struct Monster Monster;
我认为如果它是这样的话会更有意义:
typedef struct {
Object proto;
int hit_points;
} Monster;
我可能完全错了,因为我对C很新,但我会假设这两段代码都会做同样的事情。他们这样做了,那么有没有理由更喜欢一个而不是另一个?或者如果它们不同,是什么让它们与众不同?谢谢!
答案 0 :(得分:3)
第一段代码定义了类型struct Monster
,然后为其命名Monster
。
第二段代码定义了没有标记的结构,并将其定义为Monster
。
使用任一代码,您都可以使用Monster
作为类型。但只有在第一个代码中,您还可以使用struct Monster
。
答案 1 :(得分:0)
定义(来自问题的第一部分 - 加上我的自由重组):
struct Monster
{
Object proto;
int hit_points;
};
typedef struct Monster Monster;
相当于:
typedef struct Monster
{
Object proto;
int hit_points;
} Monster;
我的偏好是:
typedef struct MONSTER_S
{
Object proto;
int hit_points;
} MONSTER_T;
仅供参考...不需要结构名称。因此,如果代码只需要使用该类型,则以下情况也可以:
typedef struct
{
Object proto;
int hit_points;
} MONSTER_T;
答案 2 :(得分:0)
有时候第二种形式不会起作用。假设您要创建Monster
的链接列表。使用第一个表单,您可以添加指向Monster
中下一个struct
的指针。
struct Monster {
Object proto;
int hit_points;
struct Monster* next;
};
由于struct
没有名称,您无法以第二种形式执行此操作。