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 #6441909
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 #6441913
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 #6441925
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 #6442348
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren