M.M*_*M.M 3 c++ windows winsock2 mingw-w64
一些代码和相关的警告/错误:
#include <windows.h>
#include <iphlpapi.h>
int main() { }
F:/Prog/mingw-w64/x86_64-4.9.2-win32-seh-rt_v3-rev1/mingw64/x86_64-w64-mingw32/include/ws2ipdef.h:71:3:错误:'
ADDRESS_FAMILY'没有命名类型Run Code Online (Sandbox Code Playgroud)ADDRESS_FAMILY si_family;
#include <windows.h>
#include <winsock2.h>
#include <iphlpapi.h>
int main() { }     // this compiles successfully, only gives warning
F:/Prog/mingw-w64/x86_64-4.9.2-win32-seh-rt_v3-rev1/mingw64/x86_64-w64-mingw32/include/winsock2.h:15:2:警告:#warning请包含winsock2.h在windows.h之前[-Wcpp]
#include <winsock2.h>
#include <windows.h>
#include <iphlpapi.h>
int main() { }
(汇编成功).
我的问题是:
iphlpapi.h(以及依赖于winsock的其他文件)#include <winsock2.h>自己做,或者至少提供更好的错误消息?windows.h呢?windows.h包括winsock.h默认情况.  winsock.h并且winsock2.h 不要共存.如果winsock2.h首先包含,则禁用winsock.h,一切都很好.但如果winsock.h首先包含,则winsock2.h无法编译,因为它重新声明了许多winsock.h已经声明的内容.这就是为什么你需要先包括winsock2.h.
微软希望人们使用其中一种,而不是两种.  winsock2.h意在取代 winsock.h而不是补充它.但是,为什么他们winsock2.h如此不相容,如果winsock.h首先包括它完全打破是任何人的猜测.他们可以轻松地制作winsock2.h #ifdef任何重复的声明以避免错误.甚至winsock2.h包括winsock.h声明.但他们没有.
| 归档时间: | 
 | 
| 查看次数: | 4438 次 | 
| 最近记录: |