Visual C++ の 64 ビットへの移行に関する一般的な問題
Microsoft C++ コンパイラ (MSVC) を使用して、64 ビット Windows オペレーティング システムで実行するアプリケーションを作成する場合は、以下の点を考慮する必要があります。
int
とlong
は、64 ビット Windows オペレーティング システム上で 32 ビット値です。 64 ビット プラットフォーム用にコンパイルする必要があるプログラムでは、ポインターを 32 ビット変数に割り当てないように注意してください。 ポインターは、64 ビットのプラットフォームでは 64 ビットなので、ポインターを 32 ビット変数に割り当てると、ポインター値を切り捨てることになります。size_t
、time_t
、およびptrdiff_t
は、64 ビット Windows オペレーティング システム上で 64 ビット値です。time_t
は、Visual Studio 2005 以前の 32 ビット Windows オペレーティング システムでは 32 ビット値です。 現在は、time_t
は既定で 64 ビット整数です。 詳細については、「時間管理」を参照してください。コード内で
int
値を使用する場所について、およびその値をsize_t
またはtime_t
のどちらの値として処理するかについて考慮する必要があります。 32 ビットよりも大きくなると、int
ストレージに返されるときにデータが切り捨てられます。
%x (16 進数 int
形式) printf
修飾子は、64 ビット Windows オペレーティング システム上では期待どおりに動作しません。 この修飾子は、渡された値の最初の 32 ビットしか操作しません。
32 ビット整数型を 16 進数形式で表示するには、%I32x を使用します。
64 ビット整数型を 16 進数形式で表示するには、%I64x を使用します。
%p (ポインターに対応する 16 進数形式) は、64 ビット Windows オペレーティング システム上で期待どおりに動作します。
詳細については、以下を参照してください:
関連項目
64 ビットの x64 ターゲット用に C++ プロジェクトを構成する
Visual C++ 移植とアップグレードのガイド