`typedef struct X {}`和`typedef struct {} X`有什么区别?

Pla*_*Pro 5 c struct typedef

C中这两个声明之间有什么区别:

typedef struct square{

   //Some fields

};
Run Code Online (Sandbox Code Playgroud)

typedef struct{  

           //Some fields

} square;
Run Code Online (Sandbox Code Playgroud)

Kei*_*son 10

第一个宣言:

typedef struct square {
    // Some fields
};
Run Code Online (Sandbox Code Playgroud)

定义一个名为的类型struct square.该typedef关键字是多余的(感谢HolyBlackCat指出了这一点).它相当于:

struct square {
   //Some fields
};
Run Code Online (Sandbox Code Playgroud)

(事实上​​,您可以typedef在声明中使用关键字而不定义类型名称,这是C语法中的一个小问题.)

第一个声明应该是:

typedef struct square {
    // Some fields
} square;
Run Code Online (Sandbox Code Playgroud)

第二个宣言:

typedef struct {
    // Some fields
} square;
Run Code Online (Sandbox Code Playgroud)

定义一个匿名struct类型,然后给它别名square.

请记住,typedef它本身并不定义新类型,只定义现有类型的新名称.在这种情况下,typedef和(匿名)struct定义恰好合并为一个声明.

  • 此外,在第一种情况下,`typedef`是多余的,什么都不做. (3认同)