谁能告诉我什么时候在 C 中使用 typedef?在以下代码中,我收到警告gcc
:
warning: useless storage class specifier in empty declaration
typedef struct node
{
int data;
struct node* forwardLink;
} ;
的语法typedef
是typedef <type> <name>
; 它使类型可以通过name
. 在这种情况下,您只指定了 atype
和 no name
,因此您的编译器会抱怨。
你可能想要
typedef struct node
{
int data;
struct node* forwardLink;
} node;
所以..
你可以这样做:
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;
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;
typedef struct node
{
int data;
struct node* forwardLink;
} MyNode;
如果你想写
MyNode * p;
代替
struct node *p;
在结构内部,您仍然需要结构节点 * forwardLink;
typedef 用于定义用户数据类型。例如
typedef int integer;
现在您可以使用整数来定义 int 数据类型而不是 int。
integer a;// a would be declared as int only
对于作为某个变量的可能值列表的 contants:
typedef enum {BLACK=0, WHITE, RED, YELLOW, BLUE} TColor;
一般来说,它可以帮助您了解您是否正确地操作事物,因为编译器会警告您有关隐式转换等问题。它比仅仅让你的代码更具可读性更有用。