Compilerwarnung (Stufen 3 und 4) C4244

Aktualisiert: November 2007

Fehlermeldung

Konvertierung 'Konvertierung' von 'Typ1' nach 'Typ2', Datenverlust möglich
'conversion' conversion from 'type1' to 'type2', possible loss of data

Ein ganzzahliger Typ wurde in einen kleineren ganzzahligen Typ konvertiert. Dies entspricht einer Warnung der Stufe 4, wenn Typ1 gleich int und Typ2 kleiner als int ist. Andernfalls wird die Stufe 3 erreicht (einer Variablen vom Typ unsigned int wurde ein Wert vom Typ __int64 zugewiesen). Möglicherweise ist ein Datenverlust aufgetreten.

Wenn C4244 angezeigt wird, sollten Sie das Programm für die Verwendung kompatibler Typen ändern oder mehr Logik in den Code bringen, um sicherzustellen, dass der Bereich möglicher Werte immer mit den verwendeten Typen kompatibel ist.

C4244 kann auch auf Ebene 2 ausgelöst werden. Weitere Informationen finden Sie unter Compilerwarnung (Stufe 2) C4244.

Die Konvertierung könnte durch implizite Konvertierungen ein Problem verursachen.

Im folgenden Beispiel wird C4244 generiert:

// C4244_level4.cpp
// compile with: /W4
int aa;
unsigned short bb;
int main() {
   int b = 0, c = 0;
   short a = b + c;   // C4244

   bb += c;   // C4244
   bb = bb + c;   // C4244
   bb += (unsigned short)aa;   // C4244
   bb = bb + (unsigned short)aa;   // OK
}

Weitere Informationen finden Sie unter Usual Arithmetic Conversions (nur auf Englisch verfügbar).

// C4244_level3.cpp
// compile with: /W3
int main() {
   __int64 i = 8;
   unsigned int ii = i;   // C4244
}

C4244 kann außerdem auftreten, wenn sie mit /Wp64 kompilieren. Beachten Sie, dass /Wp64 in der Standardeinstellung für mit dem Anwendungs-Assistenten erstellte Projekte aktiviert ist.

Im folgenden Beispiel wird C4244 generiert:

// C4244_level3_b.cpp
// compile with: /W3 /Wp64
int main() {
   char* p1 = 0;
   char* p2 = 0;
   int x = p2 - p1;   // C4244
}