在 C 中,将结构声明为
typedef struct {...} Foo;
和
struct Foo {...};
我知道第二个要求你在 uses 前加上前缀struct
,但是在编写或执行程序时我会注意到这两个定义之间的区别是什么?s呢enum
?
更新:请参阅附在答案中的评论以进行澄清。
原帖。
除了必须到处写“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;
如果你写
typedef struct {...} foo;
它使您不必struct foo
到处写:您可以只写foo
.
(顺便说一下,您可以在 C++ 中免费获得这种符号便利)。
我会看一下这个SO question,然后总结一下两者之间没有明显的功能差异struct { ... }
,typedef struct { ... }
尽管如果使用正确,后者可能会使您的代码不那么繁琐并且更容易理解。