C++ で 32 ビットと 64 ビットを判断する 質問する

C++ で 32 ビットと 64 ビットを判断する 質問する

C++ コードが 32 ビットと 64 ビットのどちらでコンパイルされているかを確実に判断する方法を探しています。マクロを使用した妥当と思われる解決策を思いつきましたが、これが失敗する可能性があるケースや、これを行うより良い方法があるかどうかについて、皆さんが考えられるかどうか知りたいと思いました。クロスプラットフォームの複数のコンパイラ環境でこれを実行しようとしていることに注意してください。

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

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

ありがとう。

ベストアンサー1

残念ながら、主要なコンパイラ間で 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

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

おすすめ記事