【问题标题】:Predict unit compilation order in order avoid redefinition预测单元编译顺序以避免重新定义
【发布时间】:2015-11-27 11:45:21
【问题描述】:

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

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

如果我对重定义问题的理解有误,请指正。

【问题讨论】:

  • Err.. 我认为您无法始终如一地预测它。即使您可以使用特定的编译器,它也肯定是不可移植的。使用预处理器指令。这就是他们的目的。

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


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 2012-05-08
    相关资源
    最近更新 更多