2

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

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

我试过使用这样的代码:

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

其中 TARGET 在别处定义为 WINDOWS

 #define TARGET WINDOWS

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

4

2 回答 2

4

改用_WIN32宏:

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

_WIN32为 32 位和 64 位版本定义。请参阅C/C++ 预定义宏

于 2012-08-20T08:55:29.600 回答
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
于 2012-08-20T08:58:13.363 回答