Warnung bei addition mit überflow in c

Gast #6441907
Lesenswert?
• ▲
▼
einen schönen tag,
ich habe ein verständnisproblem in c.
1
uint8_t temp = 0;
2
temp = 0xA5 + 0xBB;

als Ergebnis bekomme ich 0x60 (auch erwartet).

Allerdings bekomme ich eine Warunung:
warning: unsigned conversion from 'int' to 'uint8_t' {aka 'unsigned 
char'} changes value from '352' to '96' [-Woverflow]

Wenn ich es sogar explizit nochmal angebe:
1
temp = uint8_t(0xA5 + 0xBB);
bekomme ich sogar einen Fehler:
expected expression before 'uint8_t'

Wie bekomme ich denn die Warnung weg?
Moderator Persönliche Seite
Lesenswert?
• ▲
▼
Jens schrieb:

> Wenn ich es sogar explizit nochmal angebe:
>
1
> temp = uint8_t(0xA5 + 0xBB);

Das ist ein C++-Konstruktor, aber kein C-Typecast.

> Wie bekomme ich denn die Warnung weg?

Naja, erstmal, indem du -Wno-overflow angibst. ;-)

Das ließe sich auch über Pragmas nur auf eine Funktion eingrenzen.

Ich vermute, wenn du den Typecast korrekt angibst, geht sie auch weg.
Gast
Lesenswert?
• ▲
▼
Also Klammern um uint8_t

(uint8_t)(100+200)

Aber warum soll er nicht warnen? Wenn du weißt das es Quatsch ist, dann 
schreib doch lieber das hin, was Du möchtest. Ein Cast ist ziemlich 
übel, da er ... alle möglichen Warnungen verhindert.
Gast
Lesenswert?
• ▲
▼
Jörg W. schrieb:
>> temp = uint8_t(0xA5 + 0xBB);
> Das ist ein C++-Konstruktor, aber kein C-Typecast.

Ja, da habe ich einen Fehler gemacht. natürlich muss es sein
temp = (uint8_t)(0xA5 + 0xBB);

A. S. schrieb:
> Aber warum soll er nicht warnen? Wenn du weißt das es Quatsch ist, dann
> schreib doch lieber das hin, was Du möchtest. Ein Cast ist ziemlich
> übel, da er ... alle möglichen Warnungen verhindert.

nun ja, ich möchte ja das haben. quasi alles was über uint8_t is weg.
Aber mit dem richtigen cast ist auch die Warnung weg
Gast
Lesenswert?
• ▲
▼
Jens schrieb:
> nun ja, ich möchte ja das haben

dann zieh doch 256 ab, wenn Du so eine konstante zahl hast. Oder Verunde 
das mit 0xff, damit der compiler weiß, was Du möchtest.

Das Problem beim Cast ist, dass er dann ALLES als Werte erlaubt, also 
auch z.B. einen Pointer statt dem Wert auf den er zeigt.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.