【发布时间】:2017-11-15 02:19:42
【问题描述】:
将 typedef 与 struct 一起使用并给它两个名称(通常是大写字母)的目的到底是什么?
今天我在看一个winsock教程,偶然发现了下面的结构体定义。
// IPv4 AF_INET sockets:
struct sockaddr_in {
short sin_family; // e.g. AF_INET, AF_INET6
unsigned short sin_port; // e.g. htons(3490)
struct in_addr sin_addr; // see struct in_addr, below
char sin_zero[8]; // zero this if you want to
};
typedef struct in_addr {
union {
struct {
u_char s_b1,s_b2,s_b3,s_b4;
} S_un_b;
struct {
u_short s_w1,s_w2;
} S_un_w;
u_long S_addr;
} S_un;
} IN_ADDR, *PIN_ADDR, FAR *LPIN_ADDR;
struct sockaddr {
unsigned short sa_family; // address family, AF_xxx
char sa_data[14]; // 14 bytes of protocol address
};
这条线具体是做什么的?
IN_ADDR, *PIN_ADDR, FAR *LPIN_ADDR;
【问题讨论】:
-
它正在创建一种与
struct in_addr同义的类型和两种指向该类型的指针类型。 -
请不要用
typedef指针,如*PIN_ADDR, FAR *LPIN_ADDR。 -
对于
typedef一个struct其唯一成员是union来说似乎很奇怪。为什么不只是typedefunion? -
在
typedef中隐藏指针对我来说是一种非常糟糕的做法。