struct和typedef

Ail*_*lyn 9 c struct typedef

以下是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)


CB *_*ley 9

不,他们并不完全等同.

在第一个版本中Foo是命名的typedef struct myStruct.

在第二个版本中,Foo是一个typedef未命名的struct.

虽然Foo在许多情况下两者都可以以相同的方式使用,但是存在重要的差异.特别是,第二个版本不允许使用前向声明来声明Foo,而第一个版本struct则是typedeffor.