コンパイラの警告 (レベル 1) C4312

'操作' : 'type1' からより大きいサイズの 'type2' へ変換します。

この警告は、32 ビット値を 64 ビット ポインター型に割り当てようとしたことを検出します。たとえば、32 ビット int または long を 64 ビット ポインターにキャストした場合などです。

この変換は、符号拡張が発生する場合、32 ビットに収まるポインター値であっても安全でないことがあります。 負の 32 ビット整数が 64 ビット ポインター型に割り当てられる場合、符号拡張によって、ポインター値が整数の値とは異なるメモリ アドレスを参照するようになります。

この警告は、64 ビット コンパイル ターゲットに対してのみ発行されます。 詳細は、「ポインターの使用規則」を参照してください。

次のコード例は、64 ビットのターゲットのコンパイル時に C4312 を生成します。

// C4312.cpp
// compile by using: cl /W1 /LD C4312.cpp
void* f(int i) {
   return (void*)i;   // C4312 for 64-bit targets
}

void* f2(__int64 i) {
   return (void*)i;   // OK
}