コンパイラの警告 (レベル 2) C4826
'type1' から 'type_2' への変換は符号拡張されています。これは、簾しない実行時の動作を発生させる可鉢があります。
この警告は、32 ビット ポインターが 64 ビット変数にキャストされたときに、コンパイラが符号拡張を実行したことを示します。
Windows の HANDLE 型で拡張が実行された場合は、この警告を無視できます。拡張がポインター型で実行された場合は、キャストを変更して符号拡張が実行されないようにする必要があります (次の例を参照してください)。
既定では、C4826 はオフに設定されています。詳細については、「既定で無効になっているコンパイラの警告」を参照してください。
使用例
次の例では C4826 エラーが生成されます。
// C4826.cpp
// compile with: /W2 /c
#include <windows.h>
#pragma warning(default: 4826)
void * __ptr64 F1 (void * __ptr32 P ) {
return (void * __ptr64)P; // C4826
// try the following line instead
// return (void * __ptr64)(ULONGLONG)(ULONG)P;
}
void * __ptr64 F2 ( void * P ) {
return (void * __ptr64)P; // C4826
// try the following line instead
// return (void * __ptr64)(ULONGLONG)(ULONG)P;
}
unsigned __int64 F3r ( void * P ) {
return (unsigned __int64)P; // C4826
// try the following line instead
// return (unsigned __int64)(ULONGLONG)(ULONG)P;
}