typedef与没有带有C语言中的结构和枚举的typedef

时间:2013-06-25 16:05:00

标签: c struct enums typedef

在C中,将结构声明为

之间是否存在任何有效差异
typedef struct {...} Foo;

struct Foo {...};

我知道第二个要求你使用struct前缀,但在编写或执行程序时我会注意到这两个定义之间有什么区别?怎么用enum s?

3 个答案:

答案 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 { ... }之间没有明显的功能差异,尽管后者可能会使你的代码变得更简单,更容易理解正确。