具有typedef的结构

时间:2012-08-26 09:12:48

标签: c struct typedef

  

可能重复:
  Purpose of struct, typedef struct, in C++
  typedef struct vs struct definitions

我知道在C

中有两种声明结构的方法
struct point{
    int x, y;
};

typedef struct{
    int x, y;
} point;

但是这两种方法之间的区别是什么?我何时使用typedef方法而不是另一种方法呢?

3 个答案:

答案 0 :(得分:2)

差异:

  1. 第一个是有效的C89;
  2. 第一个不会使结构的标签(“点”)成为完整的类型定义,因此您只能将point p;与第二个结合使用。
  3. 我们的C编程上帝,Linus Torvalds强烈鼓励不使用 typedef作为结构(除非明确需要隐藏实际字段并在不透明结构后面键入),因为它会降低可读性。

答案 1 :(得分:1)

只有一种方法可以使用struct关键字在 C 中声明struct,可选地后跟结构名称,然后是成员字段在大括号中列出。所以你可以:

  struct point_st {
     int x, y;
  };

此处point_st是您的结构的名称(或标记)。请注意,结构名称在C中具有与类型不同的名称空间(这在C ++中是不同的)。所以我习惯用_st后缀结构名称,如上所示。

您可以(独立地)使用typedef定义类型名称,例如

  typedef struct point_st Point;

(您可以在任何C类型BTW上使用typedef

例如,Gtk和Glib有很多不透明的类型,它们是不透明的结构;只有实现知道并关心结构成员。

当然编译器需要知道结构的字段来分配它;但是如果你只使用指向不透明结构的指针,你不需要声明结构(即它的大括号中的字段)。

答案 2 :(得分:0)

对于第一种形式,变量声明必须是:

struct point A;

第二种形式允许声明没有struct的变量,如

point B;
相关问题