在C中,将结构声明为
typedef struct {...} Foo;和
struct Foo {...};我知道第二个需要用struct作为uses的前缀,但是在编写或执行程序时,我会注意到这两个定义之间有什么区别?那么使用enum%s呢?
发布于 2013-06-26 00:52:06
更新:请参阅附在答案后面的评论,以便澄清。
原文。
除了having to write "struct" everywhere之外,还需要注意的是,使用avoid subtle syntax errors when working with pointers将允许您
引用:
Typedefs还可以简化指针类型的声明。请考虑以下内容:
struct Node {
int data;
struct Node *nextptr;
};使用typedef,可以像这样重写上面的代码:
typedef struct Node Node;
struct Node {
int data;
Node *nextptr;
};在C中,可以在一条语句中声明多个相同类型的变量,甚至可以混合使用指针和非指针。但是,需要在每个变量前加上一个星号,以将其指定为指针。在下面的代码中,程序员可能会假设errptr确实是Node *,但是输入错误意味着errptr是Node。这可能会导致细微的语法错误。
struct Node *startptr, *endptr, *curptr, *prevptr, errptr, *refptr;通过定义Node * types,可以确保所有变量都是指针类型。
typedef struct Node *NodePtr;
...
NodePtr startptr, endptr, curptr, prevptr, errptr, refptr;发布于 2013-06-26 00:07:19
如果你写
typedef struct {...} foo;
它使您不必到处编写struct foo:您只需编写foo即可。
(顺便说一句,您可以在C++中免费获得这种符号上的便利)。
发布于 2013-06-26 00:22:37
我会先看一下这个SO question,然后总结出struct { ... }和typedef struct { ... }在功能上没有明显的区别,尽管如果使用得当,后者可能会使您的代码不那么繁琐,也更容易理解。
https://stackoverflow.com/questions/17302190
复制相似问题