Condividi tramite


Avviso del compilatore (livello 2) C4826

Conversione da 'tipo1' a 'tipo_2' con segno esteso.Questa situazione può produrre un comportamento imprevisto in fase di esecuzione.

Questo avviso indica che il compilatore ha eseguito l'estensione del segno nel momento in cui è stato eseguito il cast di un puntatore a 32 bit su una variabile a 64 bit.

Se l'estensione è stata eseguita su un tipo di HANDLE Windows, è possibile ignorare questo avviso senza rischi di sicurezza. Se l'estensione è stata eseguita su un tipo puntatore, è necessario modificare il cast per impedire l'estensione del segno (vedere l'esempio riportato di seguito).

Per impostazione predefinita, l'avviso C4826 non è attivo. Per ulteriori informazioni, vedere Compiler Warnings That Are Off by Default.

Esempio

Nell'esempio riportato di seguito viene generato l'errore 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;
}