Advertencia del compilador (nivel 2) C4826
Actualización: noviembre 2007
Mensaje de error
La conversión de 'tipo1 ' a 'tipo_2' produce una extensión de signo. Esto puede provocar un comportamiento en tiempo de ejecución inesperado.
Conversion from 'type1 ' to 'type_2' is sign-extended. This may cause unexpected runtime behavior.
Esta advertencia indica que el compilador realizó la extensión de signo cuando un puntero de 32 bits se convirtió en una variable de 64 bits.
Si la extensión se realizó en un tipo HANDLE de ventanas, es seguro omitir esta advertencia. Si la extensión se realizó en un tipo de puntero, debería modificar la conversión de tipos para evitar la extensión de signo (vea el ejemplo siguiente).
La advertencia C4826 está desactivada de manera predeterminada. Vea Compiler Warnings That Are Off by Default para obtener más información.
Ejemplo
El ejemplo siguiente genera el error 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;
}