一些代码和相关的警告/错误:
#include <windows.h>
#include <iphlpapi.h>
int main() { }
#include <windows.h>
#include <winsock2.h>
#include <iphlpapi.h>
int main() { } // this compiles successfully, only gives warning
#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
。
Microsoft希望人们使用一个或另一个,而不是两者都使用。 winsock2.h
旨在代替winsock.h
而不是对其进行补充。但是,为什么所有人都将winsock2.h
设置为如此不兼容,以至于如果首先包含winsock.h
就会完全破坏它,这是谁的猜测。他们可以很容易地使winsock2.h
#ifdef
任何重复的声明以避免错误。甚至让winsock2.h
为声明包含winsock.h
。但是他们没有。