Funktioniert das auch?
Ja
Oder muss ich diese dann nur wieder Byte weise anreihen
Ja. Wenn du ganze Wörter einliest die aus mehreren Bytes bestehen, wäre deren Aufbau ja wieder undefiniert.
Wenn das tatsächlich so einfach funktioniert, würde das ja echt einiges erleichtern.
Ja, es funktioniert so. Der einzige Nachteil ist eine geringere Effizienz. Wenn du damit leben kannst, kannst du es genauso gut so machen.
Wegen dem String: Also prinzipiell geht das natürlich. Das Problem an sich ist ja nicht unbedingt das mehrere Bytes "verbunden" sind, sondern nur, dass undefiniert ist, wie der Verbund genau aufgebaut ist. Bei Arrays sollte das aber definiert sein. Allerdings hoffe ich für dich, dass du für Strings bereits UTF-8 einsetzt, denn es gibt ja verschiedenste Codierungen wie Zeichen gespeichert werden können. Bei Wide-Char Strings wäre das speichern nämlich nicht so einfach. Dazu tragen 2 Dinge bei: 1. Wide-Chars bestehen ja wieder aus mehreren Bytes und sind Endian-abhänig. Es wäre also notwendig alle Zeichen wieder von Hand zurecht zu drehen und 2. ist nicht definiert wie groß Wide-Char ist und wie es die Zeichen enthält. Auf Windows wird dort UTF-16 eingesetzt, auf den meisten anderen Plattformen UTF-32. Nicht bloß deshalb sondern auch aus Gründen der Portabilität und technischen Gründen solltest du also konsequent UTF-8 einsetzen, sonst wird das nicht so einfach.
Wegen der Typdefinition... du irrst dich.
Auf deinem Compiler mag es vielleicht im Moment auf einen "
int" definiert sein, aber nichts und niemand zwingt eine andere Plattform dazu, das selbe zu tun. Tatsächlich wären Typedefs in der Regel ziemlich sinnlos, wenn sie sich nicht je nach Präprozessordefinition oder Plattform ändern könnten. Wie du ja auch schon festgestellt hast, könnte man dann einfach den darunter liegenden Typ direkt verwenden und sich das sparen. Tatsächlich trifft es auf
heutigen System fast immer zu, dass ein "
int" auch 32 Bit groß ist. Aber es ist eben nichts garantiert. Und der Konsequenz und Sauberkeit wegen, würde ich deshalb auf die integrierten Typen verzichten. Bei anderen Typedefs wirst du aber auch leicht eine Änderung zwischen Plattformen betrachten können. Zum Beispiel "
int64_t", "
size_t" und andere. Und natürlich sind die auch intern irgendwie auf die integrierten Typen abgebildet, nur eben nicht immer auf den selben.