2015-11-27 27 views
0

让我们假设我们有windows.h and winsock2.h重新定义问题。预测单位编辑顺序以避免重新定义

我知道如何解决它。要100%确定,只需在预处理器定义中添加行_WINSOCKAPI_。或者定义#define _WINSOCKAPI_ befor每个windows.h包括。但我想走得更加猥琐,定义_WINSOCKAPI_只是首先包括windows.h。如何知道单位编制顺序以便将#define _WINSOCKAPI_置于正确的位置?

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

+0

错误..我不认为你可以一致地预测它。即使你可以为一个特定的编译器,它肯定是不可移植的。使用预处理器指令。这就是他们的目的。 – Baldrick

回答

0

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

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

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

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