匿名结构体(anonymous struct)是指声明结构体时没有指定结构体类型名的结构体,与共用体(union)联合使用时,方显其方便之能。
如上代码摘自winnt.h,上述代码使用 typedef 对已声明的共用体(union)类型名 _LARGE_INTEGER 声明了一个新的类型名 LARGE_INTEGER(可称“别名”)。
_LARGE_INTEGER共用体中两个结构体具有相同的数据成员类型。第一个无类型名的结构体声明的变量名为DUMMYSTRUCTNAME,意为“假的结构体名”,第一行代码将DUMMYSTRUCTNAME定义为空,即无结构体变量名;第二个结构体类型名也没有,但声明了变量名为u。存在即是合理,这两个结构体分别为何意呢?
多年前,使用匿名结构体需要声明变量,则要按示例2所示正常语法格式访问结构体中数据成员变量。
多年前的多年后,匿名结构体可以在union中不声明结构体变量,即可直接使用union定义的变量访问匿名结构体中的成员,因为没有结构体变量名嘛,也只能直接访问了,就更加方便了。
如今LARGE_INTEGER结构中依然保留有声明变量名为u的上述第2种结构体,则是为了兼容多年前写的通过声明的结构体变量名u访问其成员变量的代码。
转载请注明:春风细雨's Blog 关于匿名结构体的使用技巧