4

在 C 中,将结构声明为

typedef struct {...} Foo;

struct Foo {...};

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

4

3 回答 3

5

更新:请参阅附在答案中的评论以进行澄清。

原帖。

除了必须到处写“struct”之外,还有一点值得注意的是,使用 typedef 可以让您在使用指针时避免细微的语法错误

引用:

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 * typedef,可以确保所有变量都是指针类型。

typedef struct Node *NodePtr;
...
NodePtr startptr, endptr, curptr, prevptr, errptr, refptr;
于 2013-06-25T16:52:05.553 回答
0

如果你写

typedef struct {...} foo;

它使您不必struct foo到处写:您可以只写foo.

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

于 2013-06-25T16:07:19.203 回答
0

我会看一下这个SO question,然后总结一下两者之间没有明显的功能差异struct { ... }typedef struct { ... }尽管如果使用正确,后者可能会使您的代码不那么繁琐并且更容易理解。

于 2013-06-25T16:22:37.177 回答