コンパイラの警告 (レベル 2) C4826
更新 : 2007 年 11 月
エラー メッセージ
'type1' から 'type_2' への変換は符号拡張されています。これは、簾しない実行時の動作を発生させる可鉢があります。
この警告は、32 ビット ポインタが 64 ビット変数にキャストされたときに、コンパイラが符号拡張を実行したことを示します。
Windows の HANDLE 型で拡張が実行された場合は、この警告を無視できます。拡張がポインタ型で実行された場合は、キャストを変更して符号拡張が実行されないようにする必要があります (次の例を参照してください)。
既定では、C4826 はオフに設定されています。詳細については、「Compiler Warnings That Are Off by Default」を参照してください。
使用例
次の例では 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;
}