1. ホーム
  2. c++

[解決済み] C++の32ビットと64ビットの判定

2022-05-10 03:56:42

質問

C++ コードが 32 ビットと 64 ビットでコンパイルされているかどうかを確実に判断する方法を探しています。私たちはマクロを使用して合理的な解決策を考え出しましたが、これが失敗するケースを人々が考えることができるかどうか、またはこれを行うより良い方法があるかどうかを知りたいと思いました。私たちは、クロス プラットフォーム、マルチ コンパイラー環境でこれを実行しようとしていることに注意してください。

#if ((ULONG_MAX) == (UINT_MAX))
# define IS32BIT
#else
# define IS64BIT
#endif

#ifdef IS64BIT
DoMy64BitOperation()
#else
DoMy32BitOperation()
#endif

ありがとうございます。

どのように解決するのですか?

残念ながら、主要なコンパイラー全体で 32 / 64 ビットを定義するクロス プラットフォーム マクロはありません。 私は、最も効果的な方法が次のようなものであることを発見しました。

まず、私は自分自身の表現を選びます。 私は ENVIRONMENT64 / ENVIRONMENT32 を好みます。 それから、すべての主要なコンパイラーが 64 ビット環境かどうかを判断するために使用するものを見つけ、それを使用して変数を設定します。

// Check windows
#if _WIN32 || _WIN64
#if _WIN64
#define ENVIRONMENT64
#else
#define ENVIRONMENT32
#endif
#endif

// Check GCC
#if __GNUC__
#if __x86_64__ || __ppc64__
#define ENVIRONMENT64
#else
#define ENVIRONMENT32
#endif
#endif

もう一つの簡単な方法は、コンパイラのコマンドラインからこれらの変数を単純に設定することです。