Visual C++ の 64 ビットへの移行に関する一般的な問題Common Visual C++ 64-bit Migration Issues

Microsoft C++コンパイラ (MSVC) を使用して、64ビットの Windows オペレーティングシステムで実行するアプリケーションを作成する場合は、次の問題に注意する必要があります。When you use the Microsoft C++ compiler (MSVC) to create applications to run on a 64-bit Windows operating system, you should be aware of the following issues:

  • intlong は、64 ビット Windows オペレーティング システム上で 32 ビット値です。An int and a long are 32-bit values on 64-bit Windows operating systems. 64 ビット プラットフォーム用にコンパイルする必要があるプログラムでは、ポインターを 32 ビット変数に割り当てないように注意してください。For programs that you plan to compile for 64-bit platforms, you should be careful not to assign pointers to 32-bit variables. ポインターは、64 ビットのプラットフォームでは 64 ビットなので、ポインターを 32 ビット変数に割り当てると、ポインター値を切り捨てることになります。Pointers are 64-bit on 64-bit platforms, and you will truncate the pointer value if you assign it to a 32-bit variable.

  • size_ttime_t、およびptrdiff_tは、64ビットの Windows オペレーティングシステムでは、64ビットの値です。size_t, time_t, and ptrdiff_t are 64-bit values on 64-bit Windows operating systems.

  • time_tは、Visual Studio 2005 以前の32ビットの Windows オペレーティングシステムでは、32ビットの値です。time_t is a 32-bit value on 32-bit Windows operating systems in Visual Studio 2005 and earlier. 現在は、time_t は既定で 64 ビット整数です。time_t is now a 64-bit integer by default. 詳細については、「時間管理」を参照してください。For more information, see Time Management.

    コード内で int 値を使用する場所について、およびその値を size_t または time_t のどちらの値として処理するかについて考慮する必要があります。You should be aware of where your code takes an int value and processes it as a size_t or time_t value. 32 ビットよりも大きくなると、int ストレージに返されるときにデータが切り捨てられます。It is possible that the number could grow to be larger than a 32-bit number and data will be truncated when it is passed back to the int storage.

%x (16 進数 int 形式) printf 修飾子は、64 ビット Windows オペレーティング システム上では期待どおりに動作しません。The %x (hex int format) printf modifier will not work as expected on a 64-bit Windows operating system. この修飾子は、渡された値の最初の 32 ビットしか操作しません。It will only operate on the first 32 bits of the value that is passed to it.

  • 32 ビット整数型を 16 進数形式で表示するには、%I32x を使用します。Use %I32x to display a 32-bit integral type in hex format.

  • 64 ビット整数型を 16 進数形式で表示するには、%I64x を使用します。Use %I64x to display a 64-bit integral type in hex format.

  • %p (ポインターに対応する 16 進数形式) は、64 ビット Windows オペレーティング システム上で期待どおりに動作します。The %p (hex format for a pointer) will work as expected on a 64-bit Windows operating system.

詳細については次を参照してください:For more information, see:

関連項目See also

64 ビットの x64 ターゲット用に C++ プロジェクトを構成するConfigure C++ projects for 64-bit, x64 targets
Visual C++ 移植とアップグレードのガイドVisual C++ Porting and Upgrading Guide