Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
'conversion': Umwandlung von 'type1' in 'type2', Datenverlust ist möglich
Bemerkungen
Ein ganzzahliger Typ wird in einen kleineren ganzzahligen Typ konvertiert.
- Dies ist eine Warnung der Ebene 4, wenn Typ1 ein signiertes oder nicht signiertes
intist und Typ2 kleiner ist, z. B. ein signiertes oder nicht signiertesshort. - Es handelt sich um eine Warnung der Ebene 3, wenn ein Wert vom Typ
__int64oderunsigned __int64einem signierten oder nicht signiertenintWert zugewiesen ist. Möglicherweise ist ein möglicher Datenverlust aufgrund einer schmalen Konvertierung aufgetreten, was zu unerwarteten Ergebnissen führen kann.
Um diese Warnung zu beheben, ändern Sie entweder Ihr Programm so, dass kompatible Typen verwendet werden, oder fügen Sie Logik hinzu, die sicherstellt, dass der Bereich möglicher Werte mit den verwendeten Typen kompatibel ist. Wenn die Konvertierung beabsichtigt ist, verwenden Sie eine explizite Umwandlung, um die Warnung zu stillen.
C4244 kann auch angezeigt werden, wenn die Warnstufe 2 ist. Weitere Informationen finden Sie unter Compilerwarnung (Ebene 2) C4244.
Examples
Im folgenden Beispiel wird C4244 generiert:
// C4244_level4.cpp
// compile with: /W4
void test(unsigned short num) {}
int main() {
int int1 = 1;
unsigned int uint1 = 2;
short short1 = int1; // C4244
short short2 = (short)int1; // warning silenced - explicit cast
short short3 = uint1; // C4244
unsigned short ushort = uint1; // C4244
test(uint1); // C4244
}
Weitere Informationen finden Sie unter "Übliche arithmetische Konvertierungen".
Weitere Informationen zum Festlegen der Warnstufe in Visual Studio finden Sie unter Festlegen der Compileroptionen in der Visual Studio-Entwicklungsumgebung
// C4244_level3.cpp
// compile with: /W3
int main() {
__int64 i64 = 1;
unsigned __int64 u64 = 2;
int int1 = i64; // C4244
int int3 = u64; // C4244
}
Warnung C4244 kann beim Erstellen von Code für 64-Bit-Ziele auftreten, die beim Erstellen von 32-Bit-Zielen keine Warnung generieren. Beispielsweise führt die Zeigerarithmetik zu einer 32-Bit-Menge auf 32-Bit-Plattformen, aber einer 64-Bit-Menge auf 64-Bit-Plattformen.
Im folgenden Beispiel wird C4244 beim Kompilieren für 64-Bit-Ziele generiert:
// C4244_level3_b.cpp
// compile with: /W3
int main() {
char* p1 = 0;
char* p2 = 0;
int x = p2 - p1; // C4244
}