tagXX是结构体的【本名】,XX是【别名】,无论本名和别名都不是必要的,你甚至可以两个都不要,所以不能说“要写两个名称”,你应该问“为什么可以有两个名称”,“两个名称有什么区别”。
传统C语言中,定义结构体的标准语法是:
typedef作用是给类创建一个【别名】,下面是你给的代码:
然后你可以用XX来定义变量:
实际上定义结构体时使用typedef的话,完全可以在创建别名的同时不给结构体命名:
你甚至可以本名和别名都不要,直接用结构体定义一个实例:
【C++】
C++里,用结构定义实例已经不需要struct关键字,例如:
所以,在C++里定义结构体的同时已经不再需要用typedef创建别名。
传统C语言中,定义结构体的标准语法是:
- struct tagXX
- {
- };
- struct tagXX a;
- tagXX a; /* 编译错误!定义结构的实例时必须用struct关键字 */
typedef作用是给类创建一个【别名】,下面是你给的代码:
- typedef struct tagXX
- {
- } XX;
- struct tagXX
- {
- };
- typedef struct tagXX XX;
然后你可以用XX来定义变量:
- XX a; /*相当于struct tagXX a; */
实际上定义结构体时使用typedef的话,完全可以在创建别名的同时不给结构体命名:
- typedef struct
- {
- } XX;
- XX a;
你甚至可以本名和别名都不要,直接用结构体定义一个实例:
- struct
- {
- } a;
【C++】
C++里,用结构定义实例已经不需要struct关键字,例如:
- struct tagXX {};
- tagXX a; //C++里没有问题
- struct tagXX b; //兼容C,也没有问题
所以,在C++里定义结构体的同时已经不再需要用typedef创建别名。