Ich bin momentan dabei, eine Netzwerkanwendung zu schreiben, die dementsprechend überall gleichgroße Datentypen verwenden sollte. In C99 gibts zwar den Header stdint.h, in dem int8_t und Co definiert sind, aber offensichtlich scheinen den selbst nach 10 Jahren noch nicht alle Compiler zu kennen. Zumindest sagt mir das aktulle MS Visual Studio, dass es weder stdint.h, noch cstdint kennt. Mein aktueller Ansatz war folgender:
Nicht elegant, funktioniert nur auf Prozessoren, bei denen 1 Byte = 8 Bit richtig und garantiert nicht, dass man exakt die Größe hat, die man will, sondern nur, dass man den kleinstmöglichen Datentyp hat. Insgesamt unbefriedigend.
Die Spezifikation sagt eben nicht, dass ein char genau 8 Bit haben muss, sondern nur, dass er die kleinste adressierbare Einheit ist. Auf exotischeren Maschinen können das auch mal 7, 9 oder 12 Bit sein.
Edit: Bezüglich der Größe eines chars: Der Standard definiert, dass ein char genau ein Byte groß ist (was Jesus_666 wahrscheinlich gemeint hat), aber wie groß ein Byte ist, ist natürlich implementationsabhängig.
Ganz ehrlich, was schreibst du für Software, die übers Netzwerk mit Architekturen ungewöhnlicher Bytebreite sprechen muß? Wenn du das nicht gerade als Teil der Anforderungsspezifikation hast, dann ist das unnötiger Aufwand. Für welche Plattformen schreibst du den Code (und wäre es nicht sinnvoller, die obskureren Architekturen als Sonderfall zu behandeln und für den Rest 8-bittige Bytes anzunehmen)?
Für den konkreten Fall reicht die Beschränkung auf 8 Bit = 1 Byte, aber mich würde einfach interessieren, ob es eine saubere Lösung gibt, die überall funktioniert, so wie es der Standard verlangt.