winsock.h与winsock2.h的区别(同时包含windows.h和winsock2.h报错重定义的问题)
2017-05-27 00:02
295 查看
对于较新的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
如果winsock2.h在winsock.h之前被包含,winsock2.h中定义了_WINSOCKAPI_来避免重复编译winsock.h,但如果头文件顺序反过来,winsock.h不会阻止对winsock2.h的重复编译,编译器就会出现重定义的错误。
参见:https://stackoverflow.com/a/9168850
相关文章推荐
- 有关同时包含<winsock2.h>与<windows.h>头文件的问题
- 关于WinSock.h和WinSock2.h的重复定义问题
- Win10下python3和python2同时安装并解决pip共存问题 特别说明,本文是在Windows64位系统下进行的,32位系统请下载相应版本的安装包,安装方法类似。 使用python开
- 【VC++】 关于WinSock2.h , WinSock.h , windows.h 消除编译时版本冲突
- VS2010包含windows.h时winsock2.h出现"fd_set":struct类型重定义
- QT项目在VS上的编译,windows.h与winsock2.h存在多个重定义的问题的解决方法。
- windows函数入口问题 UNREFERENCED_PARAMETER的用处 _tWinMain与wWinMain又有什么区别
- windows.h与winsock2.h的包含顺序引起的问题
- winsock.h与winsock2.h出现重定义或不同的链接
- WINSOCK.H与winsock2.h出现重定义错误的解决方法
- windows.h和winsock2.h包含顺序问题(转)
- VS2010包含windows.h时winsock2.h出现"fd_set":struct类型重定义
- 同一段C++代码在win下和linux下同时编译时产生的头文件包含问题及解决
- Windows命令行netsh winsock reset解决网络连接问题
- windows函数入口问题 UNREFERENCED_PARAMETER的用处 _tWinMain与wWinMain又有什么区别
- Ntddk.h 和 Ntifs.h同时包含时的重复定义问题
- VS2010包含windows.h时winsock2.h出现"fd_set":struct类型重定义
- 关于 winsock.h 与 winsock2.h 中的重定义解决办法
- 同时使用afxsock.h及winsock2.h的方法 error C2011: 'fd_set' : 'struct' type redefinition的问题
- 编译时winsock.h 和 winsock2.h 的冲突 这个问题 能害死人!