预测单位编译顺序以避免重新定义

时间:2015-11-27 11:45:22

标签: c++ windows visual-c++ winsock winsock2

让我们假设我们有windows.h and winsock2.h的重定义问题。

我知道如何解决它。要100%确定只需在预处理器定义中添加行_WINSOCKAPI_。或者为每个#define _WINSOCKAPI_包含windows.h定义。但是我想更加微妙的方式,并定义_WINSOCKAPI_只是首先包括windows.h。如何知道单位编译顺序以便将#define _WINSOCKAPI_放在正确的位置?

如果我对重新定义问题的理解是错误的,请纠正我。

1 个答案:

答案 0 :(得分:0)

我认为你无法预测编译顺序。我没有读过这方面的标准,但我认为可以编译c代码的前提之一是每个源文件都可以独立编译。这使您可以进行并行构建等。

所以我不会依赖你的c / cpp文件按特定顺序编译。

但是,处理包含文件的顺序是可预测的;这是它们包含在c / cpp文件中的顺序。

我个人会在windows.h之前包含winsock2.h作为此问题的解决方案,而不是定义_WINSOCKAPI_,但将其定义为预处理器def是一个有趣的想法。