声明typedef之间的区别

时间:2014-04-30 08:41:38

标签: c typedef

我最近在C开始,想知道

之间的区别
typedef struct 
{
      char *name;
      int age;
} Person;

struct Person
{
       char *name;
       int age;
}
typedef struct Person Person;

谢谢

2 个答案:

答案 0 :(得分:3)

这样没有区别。 typedef只创建当前数据类型的别名。

但是,在第一种情况下,您可以将struct变量声明为Person me;,即仅使用Person。在第二种情况下,您可以使用Person me;struct Person me;两者都有效。

我发现后者更具可读性和可理解性。

额外备注:
顺便说一句,你的第二个声明有一个小的句法错误:

struct Person
{
       char *name;
       int age;
}; // You missed this ';'
typedef struct Person Person;

您还可以将这两个语句合并为:

typedef struct Person
{
       char *name;
       int age;
}
Person;

答案 1 :(得分:2)

在第二个示例中,struct也被赋予名称(称为"结构标记")Person,但在省略的第一个版本中,Person 1}}结构的唯一名称。

我尽可能选择前者,不需要引入额外的名字。