1

私はC++を初めて使用し、クロスプラットフォームスクリプトを作成しています。ここで、サポートが必要な部分を示します。

#if defined(_WIN64) || defined(_WIN32) ||  defined(__WIN32__) || defined(__TOS_WIN__) ||    defined(__CYGWIN__) || defined(__CYGWIN32) || defined(__MINGW32__) || defined(__BORLANDC__) || defined(__WINDOWS__)
#define M_OS_WIN
#elif defined(__linux) || defined(__linux__) || defined(linux) || defined(__gnu_linux__) ||    defined(__GNUC__)
#define M_OS_LINUX
#else
#error "OS NOT SUPPORTED";
#endif

これらのどれが正しい値ですか(これらは廃止されています、他のものを追加する必要があります)?

  1. と互換性のあるWindowsパーツが必要<conio.h>です。
  2. Linux部分がg++と互換性がある必要があります(<unistd.h>そして<termios.h>動作するはずです)。
  3. MACOS g ++は互換性がありますか?(下の行は正しいですか?);

    #elif defined(Macintosh) || defined(__APPLE__) || defined(__MACH__)

  4. これは、コンパイラがMS Visual Studioであるかどうかを確認する正しい方法#if defined _MSC_VERですか?

4

2 に答える 2

4

各プラットフォーム/システム/アーキテクチャのプリコンパイラ用に定義された現在の (および古い) マクロのコレクションは、SourceForge で入手できます。Pre-defined Compiler Macrosプロジェクトをチェックしてください。

私のクロスプラットフォーム プロジェクトでは、通常、ユース ケースごとにカスタム名を考え出し、次のように定義します。

#define OS_WINDOWS (defined(_WIN32) || defined(_WIN64) || defined(__TOS_WIN__) ...)

私のコードの残りの部分が単純なものだけに依存するように

#include "configure.h" // defines OS_WINDOWS, etc.
#ifdef OS_WINDOWS
   // Windows-specific stuff here.
#endif
于 2011-06-22T17:04:32.963 に答える
0

通常、すべてのコンパイラは、プラットフォームを決定するための事前定義されたマクロを提供します。predefined macro特定のコンパイラ を検索する必要があります。

例: MSVC の場合、定義済みマクロはここにあります。

MACOS g++ は互換性がありますか?
はい Apple の XCode ツール パッケージに付属するコンパイラは基本的に g++ ですが、少しハッキングされています。

(下の行は正しいですか?

#elif defined(Macintosh) || defined(__APPLE__) || defined(__MACH__)

また、追加する必要があります

#elif defined(macintosh) || defined(Macintosh) || defined(__APPLE__) || defined(__MACH__)

特にここを確認してください。

これは、コンパイラが MS Visual Studio かどうかを確認する正しい方法#if defined _MSC_VERですか?

はい、上記の MSVC リンクの定義済みマクロを除いて。

これは、コンパイラのバージョン番号のメジャーおよびマイナー番号コンポーネントに評価されます。メジャー番号はピリオドで区切られたバージョン番号の最初のコンポーネントで、マイナー番号は 2 番目のコンポーネントです。たとえば、 のバージョン番号が の場合Visual C++ compiler15.00.20706.01マクロ_MSC_VERは と評価され1500ます。ではVisual Studio 2010_MSC_VERは次のように定義されます。1600.

于 2011-06-22T17:10:58.760 に答える