2

Visual C ++を使用してプロジェクトをビルドおよびテストしていますが、他のプラットフォームでも使用します。最初は別のプラットフォームでコードを開始しました。

一部のクラスヘッダーには、他のプラットフォームに固有のファイルを含める必要がありますが、このファイルはVisualC++ワークスペースに存在しません。

私はこのようなコードを使ってみました:

 #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

_WIN3232ビットビルドと64ビットビルドの両方で定義されています。C /C++の事前定義されたマクロを参照してください。

于 2012-08-20T08:55:29.600 に答える
4

#define TARGET WINDOWSTARGETを文字列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 に答える