首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中使用结构和枚举的类型定义与不带类型定义的类型定义比较

在C中使用结构和枚举的类型定义与不带类型定义的类型定义比较
EN

Stack Overflow用户
提问于 2013-06-26 00:05:00
回答 3查看 3.8K关注 0票数 4

在C中,将结构声明为

代码语言:javascript
复制
typedef struct {...} Foo;

代码语言:javascript
复制
struct Foo {...};

我知道第二个需要用struct作为uses的前缀,但是在编写或执行程序时,我会注意到这两个定义之间有什么区别?那么使用enum%s呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-26 00:52:06

更新:请参阅附在答案后面的评论,以便澄清。

原文。

除了having to write "struct" everywhere之外,还需要注意的是,使用avoid subtle syntax errors when working with pointers将允许您

引用:

Typedefs还可以简化指针类型的声明。请考虑以下内容:

代码语言:javascript
复制
struct Node {
    int data;
    struct Node *nextptr;
};

使用typedef,可以像这样重写上面的代码:

代码语言:javascript
复制
typedef struct Node Node;
struct Node {
    int data;
    Node *nextptr;
};

在C中,可以在一条语句中声明多个相同类型的变量,甚至可以混合使用指针和非指针。但是,需要在每个变量前加上一个星号,以将其指定为指针。在下面的代码中,程序员可能会假设errptr确实是Node *,但是输入错误意味着errptr是Node。这可能会导致细微的语法错误。

代码语言:javascript
复制
struct Node *startptr, *endptr, *curptr, *prevptr, errptr, *refptr;

通过定义Node * types,可以确保所有变量都是指针类型。

代码语言:javascript
复制
typedef struct Node *NodePtr;
...
NodePtr startptr, endptr, curptr, prevptr, errptr, refptr;
票数 5
EN

Stack Overflow用户

发布于 2013-06-26 00:07:19

如果你写

typedef struct {...} foo;

它使您不必到处编写struct foo:您只需编写foo即可。

(顺便说一句,您可以在C++中免费获得这种符号上的便利)。

票数 0
EN

Stack Overflow用户

发布于 2013-06-26 00:22:37

我会先看一下这个SO question,然后总结出struct { ... }typedef struct { ... }在功能上没有明显的区别,尽管如果使用得当,后者可能会使您的代码不那么繁琐,也更容易理解。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17302190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档