有人能告诉我什么时候在C中使用typedef吗?在以下代码中,我收到gcc
的警告:
warning: useless storage class specifier in empty declaration
typedef struct node
{
int data;
struct node* forwardLink;
} ;
答案 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;
一般来说,它可以帮助您了解您是否正确操作事物,因为编译器会警告您隐式转换等等。 它比使代码更具可读性更有用。