【问题标题】:How can I conditionally include a nonexistent file in Visual C++?如何在 Visual C++ 中有条件地包含一个不存在的文件?
【发布时间】:2012-08-20 08:53:31
【问题描述】:

我正在使用 Visual C++ 来构建和测试一个项目,但我也会在其他平台上使用它。我最初是在不同的平台上开始编写代码的。

在我的一些类头文件中,我需要包含一个特定于其他平台的文件,但是,该文件在 Visual C++ 工作区中不存在。

我尝试过使用这样的代码:

 #if TARGET == OTHERPLATFORM
 #include "themissingfile.h"
 #endif

其中 TARGET 在别处定义为 WINDOWS

 #define TARGET WINDOWS

但是,我仍然收到一个编译器错误,指出找不到“themissingfile.h”。似乎预编译器正在处理 if 之前的包含。解决这个问题的最佳方法是什么?我想我可以在 Visual C++ 源文件夹中创建一个空白的“themissingfile.h”,但在我看来应该有更好的解决方案。

【问题讨论】:

    标签: c++ visual-c++


    【解决方案1】:

    #define TARGET WINDOWS 没有将 TARGET 设置为字符串 WINDOWS:它将它设置为任何 WINDOWS 定义的对象。很可能会发生这种情况:

      #define WINDOWS          // Sets WINDOWS to 0
      #define OTHERPLATFORM    // Sets OTHERPLATFORM to 0
      #define TARGET WINDOWS   // Sets TARGET to 0
    
      #if TARGET == OTHERPLATFORM // Evaluates to 0==0, so true
    

    【讨论】:

      【解决方案2】:

      改用_WIN32 宏:

      #ifndef _WIN32
      #include "themissingfile.h"
      #endif
      

      _WIN32 是为 32 位和 64 位版本定义的。见C/C++ Predefined Macros

      【讨论】:

      • (不是我的投票)。这不能解释问题,也没有必要。 Frederik Slijkerman 给出了正确答案。
      • @MSalters,OP 正在重新发明轮子。存在指示编译器和平台的现有宏。 IMO,这提供了一个解决方案,但不可否认,它没有用发布的代码解释行为。
      猜你喜欢
      • 1970-01-01
      • 2013-09-17
      • 2012-03-15
      • 2016-04-05
      • 1970-01-01
      • 2020-03-22
      • 2013-04-10
      • 1970-01-01
      • 2019-09-19
      相关资源
      最近更新 更多