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