在C中,将结构声明为
之间是否存在任何有效差异typedef struct {...} Foo;
和
struct Foo {...};
我知道第二个要求你使用struct
前缀,但在编写或执行程序时我会注意到这两个定义之间有什么区别?怎么用enum
s?
答案 0 :(得分:5)
更新:请参阅答案附带的评论以澄清。
原帖。
除了having to write "struct" everywhere之外,还有一点值得注意的是,使用typedef将允许您avoid subtle syntax errors when working with pointers:
引用:
Typedef还可以简化指针类型的声明。考虑 这样:
struct Node {
int data;
struct Node *nextptr;
};
使用typedef,可以像这样重写上面的代码:
typedef struct Node Node;
struct Node {
int data;
Node *nextptr;
};
在C中,可以在一个中声明多个相同类型的变量 声明,甚至混合指针和非指针。但是,有人会 需要在星号前加上每个变量的前缀,以将其指定为a 指针。在下文中,程序员可能会认为errptr是 确实是Node *,但是印刷错误意味着errptr是一个 节点。这可能会导致细微的语法错误。
struct Node *startptr, *endptr, *curptr, *prevptr, errptr, *refptr;
通过定义Node * typedef,可以确保所有变量 将是指针类型。
typedef struct Node *NodePtr;
...
NodePtr startptr, endptr, curptr, prevptr, errptr, refptr;
答案 1 :(得分:0)
如果你写
typedef struct {...} foo;
它使您无需在任何地方写struct foo
:您只需撰写foo
。
(顺便说一句,你可以在C ++中免费获得这种符号方便性。)
答案 2 :(得分:0)
我会看一下这个SO question,然后总结一下struct { ... }
和typedef struct { ... }
之间没有明显的功能差异,尽管后者可能会使你的代码变得更简单,更容易理解正确。