编译器警告(等级 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;
}