Windows网络编程代码是否违反严格别名规则?
结构体指针强制转换与严格别名规则的Windows实践
正如Stack Overflow的一条评论所述,将一个结构体强制转换为另一个结构体指针的行为违反了C语言的严格别名规则,但在Windows C编程场景中,这种做法却被广泛使用——比如Winsock API中的bind()函数调用。
bind()函数调用示例
struct sockaddr_in sockaddrinstance; // 为提高可读性修改了变量名(原变量名:`struct sockaddr_in sockaddr`) bind(ListenSocket, (SOCKADDR*) &sockaddrinstance, sizeof(sockaddr));
Winsock2 API相关定义
bind()函数原型
int WSAAPI bind( [in] SOCKET s, [in] const sockaddr *name, [in] int namelen );
sockaddr_in结构体定义
typedef struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; } SOCKADDR_IN;
sockaddr结构体定义
typedef struct sockaddr { ushort sa_family; char sa_data[14]; } SOCKADDR;
内容的提问来源于stack exchange,提问作者bangingmyheadontable
相关产品推荐
相关产品推荐

