如何在Visual C ++中有条件地包含不存在的文件?

时间:2012-08-20 08:53:32

标签: c++ visual-c++

我正在使用Visual C ++来构建和测试项目,但我也将在其他平台上使用它。我最初在不同的平台上启动了代码。

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

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

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

其中TARGET在其他地方被定义为WINDOWS

 #define TARGET WINDOWS

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

2 个答案:

答案 0 :(得分:4)

改为使用_WIN32宏:

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

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

答案 1 :(得分:4)

#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