问题
代码如下 :
typedef struct tagXX
{
}XX;
//为什么不直接如下使用
struct XX
{
};
//或者把tagXX去掉。
tagXX
是结构体的【本名】,XX
是【别名】,无论本名和别名都不是必要的,你甚至可以两个都不要。
说明
传统C语言中,定义结构体的标准语法是:
struct tagXX
{
};
tagXX
是这个结构体的【本名】。你使用本名定义一个结构体的实例时,必须加上struct
:
struct tagXX a;
tagXX a; /* 编译错误!定义结构的实例时必须用struct关键字 */
typedef
作用是给类创建一个【别名】
typedef struct tagXX
{
} XX;
//其实这段代码相当于:
struct tagXX
{
};
typedef struct tagXX XX;
这里面,tagXX
是这个结构体的本名,XX
只是struct tagXX
的别名,然后你可以用XX
来定义变量:
XX a; /*相当于struct tagXX a; 这样代码更简洁了*/
//实际上定义结构体时使用typedef的话,完全可以在创建别名的同时不给结构体命名:
typedef struct
{
} XX;
XX a;
//这里,结构体没有了“本名”,剩下XX这个别名,同样可以使用"XX a; "来定义实例。
//你甚至可以本名和别名都不要,直接用结构体定义一个实例
struct
{
} a
c++
C++里,用结构定义实例已经不需要struct关键字,例如
struct tagXX {};
tagXX a; //C++里没有问题
struct tagXX b; //兼容C,也没有问题
//所以,在C++里定义结构体的同时已经不再需要用typedef创建别名
总结
为了兼容c,方便使用结构体变量名 定义变量。