以下是C中的等价物吗?
// #1
struct myStruct {
int id;
char value;
};
typedef struct myStruct Foo;
// #2
typedef struct {
int id;
char value;
} Foo;
Run Code Online (Sandbox Code Playgroud)
如果没有,我应该使用哪一个以及何时使用?
Emi*_*l H 12
第二个选项无法引用自身.例如:
// Works:
struct LinkedListNode_ {
void *value;
struct LinkedListNode_ *next;
};
// Does not work:
typedef struct {
void *value;
LinkedListNode *next;
} LinkedListNode;
// Also Works:
typedef struct LinkedListNode_ {
void *value;
struct LinkedListNode_ *next;
} LinkedListNode;
Run Code Online (Sandbox Code Playgroud)
不,他们并不完全等同.
在第一个版本中Foo是命名的typedef struct myStruct.
在第二个版本中,Foo是一个typedef未命名的struct.
虽然Foo在许多情况下两者都可以以相同的方式使用,但是存在重要的差异.特别是,第二个版本不允许使用前向声明来声明Foo,而第一个版本struct则是typedeffor.
| 归档时间: |
|
| 查看次数: |
1859 次 |
| 最近记录: |