一些代码和相关的警告/错误:

#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.hwinsock.hwinsock2.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。但是他们没有。

    09-12 00:47