www.mikrocontroller.net

Forum: Compiler & IDEs Warnung nach kompilieren


Autor: Andreas Posch (andyp17)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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
tempByte[1] = (uint8_t) _serial>>24;
Damit sollte die Meldung verschwinden.

Autor: Andreas Posch (andyp17)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes M. (johnny-m)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas Posch (andyp17)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke.. hat funktioniert!


mfg
Andy

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.