warning C4309: '=': Verkürzung eines konstanten Wertes
-
Hey,
ich hab mal ne Frage zu der im Betreff genannten Warnung.
Ich hab mir globale Variablen als chars deklariert.extern char ctest_g;nun möchte ich diese initialisieren, das hab ich wie folgt gemacht:
ctest_g = 0xFF;Das müsste doch gehn oder hab ich ein Denkfehler?
Grüße Sebastian
-
char ctest_g = 0xFF;
-
Hallo,
sulmer schrieb:
Hey,
ich hab mal ne Frage zu der im Betreff genannten Warnung.
Ich hab mir globale Variablen als chars deklariert.extern char ctest_g;nun möchte ich diese initialisieren, das hab ich wie folgt gemacht:
ctest_g = 0xFF;Das müsste doch gehn oder hab ich ein Denkfehler?
Grüße Sebastian
Das geht auch, aber es ist bedenklich, also wird wenigstens gewarnt. Da versucht wird, einen int-Wert in einen signed char (Standardeinstellung) zu "pressen", wird der Wert nicht nur verkürzt (ein int hat einen grösseren Wertebereich und belegt mehr Bytes als ein char), der Wert ist jetzt auch nicht mehr vorzeichenlos. Also besser einen unsigned char verwenden, oder den (Windows-)Datentyp BYTE, wenn die Werte nicht noch grösser werden. Man könnte auch folgendes schreiben, wenn man eine Integer-Interpretation von 0xFF vermeiden will (Zeichenkonstante):
ctest_g = '\xFF';MfG,
Probe-Nutzer
-
Mit unsigned char funktionierts ohne Probleme. Danke