64-Bit Warnung: Konvertierung von 'size_t' nach 'DWORD', Datenverlust möglich
-
Hi,
bekomme bei diesem Code:
size_t s = 5; DWORD d = s;
Die 64-Bit Warnung: Konvertierung von 'size_t' nach 'DWORD', Datenverlust möglich
size_t ist doch unsigned int und DWORD unsigned long. Aber long ist doch gleich (oder größer) als int. Ich verstehe nicht wie es da zu Datenverlusten kommen kann.
-
Nehme nal an du arbeitest auf einem 64-bit system. Da wird unsigned int wahrscheinlich 64 bit breit sein.
Kurt
-
Nein mit 32-Bit System.
Wenn unsigned int 64-bit breit ist, ist aber unsigned long mindestens genauso breit.
-
Habe auch unsigned long gemeint.
Trotzdem ist DWORD nur 32-bit breit. Du weist einer 32-bit variablen einen 64 bit-wert zu => Warnung.
Komisch ist "64-Bit Warnung: Konvertierung von 'size_t' nach 'DWORD', Datenverlust möglich" auf einem 32-bit system.
Kurt
-
Komisch ist "64-Bit Warnung: Konvertierung von 'size_t' nach 'DWORD', Datenverlust möglich" auf einem 32-bit system.
KurtVisual Studio hat eine 64Bit-Portabilitätsprüfung. Es gibt also Warnungen aus, die nur auf einem 64Bit-System relevant wären. Diese Prüfung lässt sich aber in den Projektoptionen ausschalten.
-
Also size_t ist doch der größt mögliche Wert auf einem System (nichts mit int oder long!), wäre also auf einem 64bit-System auf jeden Fall 64bit. Somit stimmt die Warnung, da DWORD nunmal definitiv "nur" 32bit.
Fazit: Der Compiler funktioniert ordnungsgemäß.
-
Artchi schrieb:
Also size_t ist doch der größt mögliche Wert auf einem System
nö. wo haste das denn her?
-
Danke Leute! Das DWORD unter 64-bit Systemen, 32-Bit breit bleibt wusste ich nicht.
Aber ich muss wohl static_cast benutzen um die Warnung zu unterdrücken, weil die Funktion nur DWORD nimmt und nicht DWORD_PTR.
Das ist das konkrete Beispiel was ich hab:
std::vector<TCHAR> buffer(...); GetModuleFileName(NULL, &buffer[0], buffer.size());
-
Wenn du nicht planst, dein Projekt auf 64bit zu portieren, kannst du auch einfach das abschalten.
Ansonsten solltest du dir Ressourcen über das Schreiben von portablem Code zwischen 32bit und 64bit durchlesen. Auf einem 64Bit-Windows-System wird ja wahrscheinlich der 3.Parameter von GetModuleFilename auch auf QWORD geändert werden, diese Prototypen sind aber in den derzeitigen SDK-Headern nicht enthalten, deshalb geht Visual Studio von einem Portabilitätsproblem aus.