Re: WinAVR warum hier kein Warning?
- From: Heinz Saathoff <newshsaat@xxxxxxxx>
- Date: Thu, 3 Aug 2006 09:27:03 +0200
Moin,
Werner Brennecke schrieb...
uint8_t i8 = 0;
uint16_t i16 = 0;
uint32_t i32 = 20000;
i16=i32;
i8=i32;
warum erzeugen die unteren 2 Zeilen eigentlich kein Warning in WinAVR obwohl
ich den
Parameter "-Wall" im gcc gesetzt habe?
Keine Ahnung, nutze den GCC nicht. Allerdings sind Warnungen ja auch nur
'kann', aber nicht 'muß'.
Wo ist mein Denkfehler?
Keiner, denn solche Zuweisungen können immer mit Genauigkeitsverlust
einhergehen. Allerdings gibt es für den 'unsigned'-Fall eine klare
Reglung im Standard bezüglich Konversion:
1 When a value with integer type is converted to another
integer type other than _Bool, if the value can be
represented by the new type, it is unchanged.
2 Otherwise, if the new type is unsigned, the value is
converted by repeatedly adding or subtracting one more
than the maximum value that can be represented in the
new type until the value is in the range of the new type.
Nach Fall 2 wird der Code jetzt so interpretiert, wenn
sizeof(i8) == sizeof(unsigned char)
und
sizeof(i16) == sizeof(unsigned short)
gilt:
i16=i32 % (USHRT_MAX+1);
i8=i32 % (UCHAR_MAX+1);
- Heinz
.
- References:
- WinAVR warum hier kein Warning?
- From: Werner Brennecke
- WinAVR warum hier kein Warning?
- Prev by Date: Re: suche IC für Logic Level Translation:5V => 3,3V
- Next by Date: Re: WinAVR warum hier kein Warning?
- Previous by thread: Re: WinAVR warum hier kein Warning?
- Next by thread: Norm für ein-/zweipolige Abschaltung
- Index(es):
Relevant Pages
|
Loading