3

私はVisualStudioで作業していますが、私のプロジェクトはPOSIXベースの環境(marmalade sdk)用です。このプロジェクトでは、リリースビルドはARM用のgccでコンパイルされますが、デバッグバージョンはWindowsで動作し、MSコンパイラによってコンパイルされます。また、この環境には、STLおよびその他の標準ライブラリの独自の実装があります。

これらのc++ライブラリの多くには、次のようなコードがあります。

#if defined( _MSC_VER )
   #include <Windows.h>
#else
   #include <pthread.h>
#endif

_MSC_VERマクロの定義を解除することは可能ですか?-C++ライブラリがここでPOSIXシステムを検出するようにします。

4

2 に答える 2

5

_MSC_VERは、「コンパイラのバージョン番号のメジャー番号とマイナー番号のコンポーネントを評価する」ように、Microsoftコンパイラでコンパイルするときに定義されます(常に定義する必要があります)。したがって、コードは間違ったマクロテストを使用しています。これは、Windows環境の違いに関係なく、コンパイラーの値に常に定義されるためです。

の定義を破棄するのではなく_MSC_VER(コードがコンパイラのバージョンを本当に知りたい場合は他の問題につながる可能性があります)、代わりに実際に行うべきことは、条件を修正して、を区別するより適切なマクロテストが使用されるようにすることです。遭遇する可能性のあるWindows環境の種類。

ここで検討できる事前定義されたマクロのより完全なリストを参照してください

条件を置き換えることができます...

#if someOtherConditionGoesHere

...または追加の条件で拡張します。

#if defined(_MSC_VER) && someOtherConditionGoesHere
于 2013-04-22T20:09:04.693 に答える
2

もちろん:

#undef _MSC_VER

#if defined( _MSC_VER )
   #include <Windows.h>
#else
   #include <pthread.h>
#endif

または、使用されているファイルを含める前に#undefします_MSC_VER

于 2012-03-14T06:39:45.723 に答える