Compilerwarnung (Stufe 2) C4826

Aktualisiert: November 2007

Fehlermeldung

Die Konvertierung von 'Typ1' in 'Typ2' ist signaturerweitert. Dies kann zu unerwartetem Laufzeitverhalten führen.
Conversion from 'type1 ' to 'type_2' is sign-extended. This may cause unexpected runtime behavior.

Diese Warnung wird angezeigt, wenn der Compiler beim Umwandeln eines 32-Bit-Zeigers in eine 64-Bit-Variable eine Vorzeichenerweiterung ausgeführt hat.

Wenn die Erweiterung auf einem Windows-HANDLE-Typ ausgeführt wurde, können Sie diese Warnung ignorieren. Wenn die Erweiterung auf einem Zeigertyp ausgeführt wurde, sollten Sie den Code so anpassen, dass die Vorzeichenerweiterung verhindert wird (siehe Beispiel unten).

C4826 ist standardmäßig deaktiviert. Weitere Informationen finden Sie unter Compiler Warnings That Are Off by Default.

Beispiel

Im folgenden Beispiel wird C4826 generiert.

// 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;
}