winsock.h与winsock2.h的区别(同时包含windows.h和winsock2.h报错重定义的问题)

Posted consolas11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了winsock.h与winsock2.h的区别(同时包含windows.h和winsock2.h报错重定义的问题)相关的知识,希望对你有一定的参考价值。

对于较新的Windows版本,windows.h包含winsock2.h;对于较老的Windows版本,windows.h包含winsock.h。所以问题的本质并不是在与限制windows.h,而是当winsock.h(或包含winsock.h的windows.h)在winsock2.h之前被包含,编译器就会报错。因为winsock2.h设计来是为了取代winsock.h的,在winsock.h中定义的内容在winsock2.h中同样定义。

如果winsock2.h在winsock.h之前被包含,winsock2.h中定义了_WINSOCKAPI_来避免重复编译winsock.h,但如果头文件顺序反过来,winsock.h不会阻止对winsock2.h的重复编译,编译器就会出现重定义的错误。

参见:https://stackoverflow.com/a/9168850

以上是关于winsock.h与winsock2.h的区别(同时包含windows.h和winsock2.h报错重定义的问题)的主要内容,如果未能解决你的问题,请参考以下文章

Winsock2.h 与 winsock2.h 和 wsock32.lib 与 ws2_32.lib

<winsock.h> 和 <winsock2.h> 之间有区别吗?

winsock.h与winsock2.h冲突解决

WinSock2.h 中的重新定义错误 [重复]

VS2008 编译错误 <winsock2.h>

包含Winsock2.h出错问题