> Noch ne Gemeinheit, bei int ist die Länge undefiniert.
Generell ist bei allen ,,allgemeinen Typen'' die Länge undefiniert.
Es gibt nur Mindestanforderungen an die Genauigkeit, die bei unseren
üblichen Zweierkomplementdarstellungen und IEEE754-Gleitkommazahlen
folgendes implizieren:
. sizeof(char) >= 8
. sizeof(short) >= 16
. sizeof(int) >= 16
. sizeof(long) >= 32
. sizeof(long long) >= 64
. sizeof(float) >= 32
. sizeof(double) > 32
(Letzteres wird vom AVR-GCC derzeit nicht eingehalten.)
> Statt int sollte man daher besser short (16Bit) nehmen, da auf
> 32Bittern int = long (32Bit) ist.
Nein, wenn man Typen mit expliziten Längen haben möchte, sollte man
auch Typen mit expliziten Längen benutzen, statt implizite Annahmen
zu treffen. Diese sind (per C99) in <stdint.h> definiert. Wenn eine
Maschine dann z. B. keinen 8-Bit-Datentyp kennt (soll's bei einigen
DSPs geben), dann bekommt man wenigstens saubere Fehler beim Versuch,
int8_t oder uint8_t zu benutzen (die gibt's dort dann nicht), statt
irgendwelcher Überraschungen, weil der Programmierer implizit
angenommen hat, dass sein "unsigned char" genau 8 Bits lang wäre und
von 255 nach 0 umschlägt.