什么时候在c中使用typedef?

时间:2012-10-15 16:45:53

标签: c struct typedef

有人能告诉我什么时候在C中使用typedef吗?在以下代码中,我收到gcc的警告:

warning: useless storage class specifier in empty declaration

typedef struct node
{
  int data;
  struct node* forwardLink;
} ;

6 个答案:

答案 0 :(得分:12)

typedef的语法是typedef <type> <name>;它使类型可以通过name访问。在这种情况下,您只指定了type,而没有name,因此您的编译器会抱怨。

你可能想要

typedef struct node
{
  int data;
  struct node* forwardLink;
} node;

答案 1 :(得分:10)

所以..

你可以这样做:

struct node {
  int data;
  struct node* forwardLink;
};

定义可用作struct node的对象。

像这样:

struct node x;

但是,假设您想将其称为node。然后你可以这样做:

struct node {
  int data;
  struct node* forwardLink;
};

typedef struct node node;

 typedef struct {
  int data;
  void* forwardLink;
} node;

然后将其用作:

node x;

答案 2 :(得分:2)

如果要为某个类型使用其他名称,请使用typedef,例如结构。

在您的情况下,您可以使用struct node作为Node的别名,而不是使用struct node来声明变量。

但是你在声明中遗漏了别名:

typedef struct node
{
  int data;
  struct node* forwardLink;
} Node;

这可以完成同样的事情,但可能更能说明错误的原因:

struct node
{
  int data;
  struct node* forwardLink;
};

// this is equivalent to the above typedef:
typedef struct node Node;

答案 3 :(得分:1)

typedef struct node
{
    int data;
    struct node* forwardLink;
} MyNode;

如果你想写

MyNode * p;

而不是

struct node *p;

在struct中,你仍然需要     struct node * forwardLink;

答案 4 :(得分:0)

Typedef用于定义用户数据类型。 例如

typedef int integer;

现在您可以使用integer来定义int数据类型而不是int。

integer a;// a would be declared as int only

答案 5 :(得分:0)

对于某些变量的可能值列表:

typedef enum {BLACK=0, WHITE, RED, YELLOW, BLUE} TColor;

一般来说,它可以帮助您了解您是否正确操作事物,因为编译器会警告您隐式转换等等。 它比使代码更具可读性更有用。