Typedef struct vs struct?|定义差异|

hit*_*ter 6 c struct typedef definition

以下块 main() 在每个函数(全局范围)

第1块之外和之前:

struct flight{
int number;
int capacity;
int passengers;
};
Run Code Online (Sandbox Code Playgroud)

有了这个,你可以创建数组,指针,变量与写作形成对比}var; (它只定义了这个自定义数据类型的一个变量(struct flight))

第二块:

typedef struct flight{
int number;
int capacity;
int passengers;
}flight;
Run Code Online (Sandbox Code Playgroud)

声明这将创建一个数据类型的飞行,而不必编写结构飞行的所有时间
在一个块的末尾写我的问题是,为什么需要typedef的飞行第二次?
这有点令人困惑(它看起来只是该数据类型的变量)

oua*_*uah 12

我的问题是为什么typedef需要在块结束时第二次写入航班?

当你声明:

typedef struct flight{
    int number;
    int capacity;
    int passengers;
 }flight;
Run Code Online (Sandbox Code Playgroud)

你实际上宣布了两件事:

  • 一种新的结构类型 struct flight
  • 一个类型别名flightstruct flight.

类型别名名称typedef 出现在声明末尾的原因与任何普通声明一样,是因为由于历史原因typedef,它与存储类说明符(如staticauto)放在相同的说明符类别中.

请注意,您只需声明:

typedef struct {
    int number;
    int capacity;
    int passengers;
}flight;
Run Code Online (Sandbox Code Playgroud)

如果您只想使用类型标识符,则不带标记名称flight.

  • +1.你说'如果你打算只使用'; 你可以说'并且你只能使用' - 无标签版本中没有`struct flight`(除非它是一些不相关的结构类型,这将是糟糕的编码风格,但远非不可能). (2认同)
  • 没有标签名称,"flight"类型不能包含"flight*"类型的成员(因为标识符"flight"不能及早看到). (2认同)