让我们假设我们有windows.h and winsock2.h的重定义问题。
我知道如何解决它。要100%确定只需在预处理器定义中添加行_WINSOCKAPI_
。或者为每个#define _WINSOCKAPI_
包含windows.h
定义。但是我想更加微妙的方式,并定义_WINSOCKAPI_
只是首先包括windows.h
。如何知道单位编译顺序以便将#define _WINSOCKAPI_
放在正确的位置?
如果我对重新定义问题的理解是错误的,请纠正我。
答案 0 :(得分:0)
我认为你无法预测编译顺序。我没有读过这方面的标准,但我认为可以编译c代码的前提之一是每个源文件都可以独立编译。这使您可以进行并行构建等。
所以我不会依赖你的c / cpp文件按特定顺序编译。
但是,处理包含文件的顺序是可预测的;这是它们包含在c / cpp文件中的顺序。
我个人会在windows.h之前包含winsock2.h作为此问题的解决方案,而不是定义_WINSOCKAPI_
,但将其定义为预处理器def是一个有趣的想法。