9

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

warning: useless storage class specifier in empty declaration

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

6 回答 6

12

的语法typedeftypedef <type> <name>; 它使类型可以通过name. 在这种情况下,您只指定了 atype和 no name,因此您的编译器会抱怨。

你可能想要

typedef struct node
{
  int data;
  struct node* forwardLink;
} node;
于 2012-10-15T16:47:08.013 回答
10

所以..

你可以这样做:

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

定义一个可以用作struct node.

像这样:

struct node x;

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

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

typedef struct node node;

或者

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

然后将其用作:

node x;
于 2012-10-15T16:48:23.477 回答
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;
于 2012-10-15T16:47:44.407 回答
1
typedef struct node
{
    int data;
    struct node* forwardLink;
} MyNode;

如果你想写

MyNode * p;

代替

struct node *p;

在结构内部,您仍然需要结构节点 * forwardLink;

于 2012-10-15T16:49:24.203 回答
1

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

typedef int integer;

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

integer a;// a would be declared as int only
于 2012-10-15T16:54:10.053 回答
0

对于作为某个变量的可能值列表的 contants:

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

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

于 2012-10-15T20:26:23.257 回答