C中的结构混淆

时间:2014-04-26 01:22:46

标签: c struct typedef

所以我正在查看this C tutorial,我找到了这些代码行:

struct Monster {
    Object proto;
    int hit_points;
};
typedef struct Monster Monster;

我认为如果它是这样的话会更有意义:

typedef struct {
    Object proto;
    int hit_points;
} Monster;

我可能完全错了,因为我对C很新,但我会假设这两段代码都会做同样的事情。他们这样做了,那么有没有理由更喜欢一个而不是另一个?或者如果它们不同,是什么让它们与众不同?谢谢!

3 个答案:

答案 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没有名称,您无法以第二种形式执行此操作。