Forum: Compiler & IDEs Warnung nach kompilieren


von Andreas P. (andyp17)


Lesenswert?

Hallo,

Ich bekommen nach dem Kompilieren folgende Warnungen:

"large integer implicitly truncated to unsigned type" bezogen auf 
folgende Code-Zeilen:

   tempByte[3]=_serial>>8;
   tempByte[2]=_serial>>16;
   tempByte[1]=_serial>>24;

tempByte ist eine Array vom Typ uint8_t
_serial ist eine Konstante vom Typ uint32_t

Was sagt diese Warnung aus und wie krieg ich sie los?



Vielen Dank!!

Andy

von Johannes M. (johnny-m)


Lesenswert?

Die Warnung sagt aus, dass Du einen langen Integer-Wert einer 
8-Bit-Variable zuweist und der Wert dadurch implizit abgeschnitten 
wird. Da das genau das ist, was Du willst, kannst Du die Meldung im 
Prinzip ignorieren. Der Compiler denkt hier nunmal, da Du eben keine 
explizite Typkonversion machst, dass das evtl. nicht so gewollt ist 
und weist Dich netterweise darauf hin. Wenn Du es sauber machen willst 
(und damit der Compiler auch weiß, dass Du weißt, was Du tust und 
dass das ganze beabsichtigt ist), mache vor der Zuweisung eine 
explizite Typkonversion
1
tempByte[1] = (uint8_t) _serial>>24;
Damit sollte die Meldung verschwinden.

von Andreas P. (andyp17)


Lesenswert?

OK, hab ich gemacht. Nur bekomm ich jetzt folgende Warnungen:

.//Code_ZR_ZED.c:213: warning: integer overflow in expression
.//Code_ZR_ZED.c:214: warning: integer overflow in expression
.//Code_ZR_ZED.c:215: warning: right shift count >= width of type
.//Code_ZR_ZED.c:215: warning: integer overflow in expression
.//Code_ZR_ZED.c:216: warning: right shift count >= width of type
.//Code_ZR_ZED.c:216: warning: integer overflow in expression
.//Code_ZR_ZED.c:223: warning: integer overflow in expression
.//Code_ZR_ZED.c:224: warning: integer overflow in expression
.//Code_ZR_ZED.c:225: warning: right shift count >= width of type
.//Code_ZR_ZED.c:225: warning: integer overflow in expression


:-/


lg
Andy

von Johannes M. (johnny-m)


Lesenswert?

Sorry, da fehlte eine Klammer! Muss natürlich nach dem Schieben 
gecastet werden:
1
tempByte[1] = (uint8_t) (_serial>>24);
Hättest Du aber auch selber drauf kommen können...;-)

von Johannes M. (johnny-m)


Lesenswert?

BTW:
Wenn Du "_serial" selbst definiert haben solltest: Gewöhne es Dir 
schnell wieder ab, Bezeichner zu verwenden, die mit Underscores 
beginnen. Die sind dem System (Compiler, Bibliotheken) vorbehalten.

von Andreas P. (andyp17)


Lesenswert?

Danke.. hat funktioniert!


mfg
Andy

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.