Welche Überlegung lohnt sich für Plattformen mit Nicht-8-Bit-Zeichen?
magische Zahlen treten zB beim Verschieben auf;
Die meisten davon können ganz einfach mit CHAR_BIT und z. B. UCHAR_MAX anstelle von 8 und 255 (oder ähnlichem) behandelt werden.
hoffentlich definiert deine Implementierung diese :)
das sind die "gemeinsamen" Probleme .....
Ein weiteres indirektes Problem ist, dass Sie Folgendes haben:
struct xyz {
uchar baz;
uchar blah;
uchar buzz;
}
Dies kann "nur" (im besten Fall) 24 Bit auf einer Plattform dauern, aber zB 72 Bit an anderer Stelle .....
Wenn jeder Uchar "Bit-Flags" enthielt und jeder Uchar nur 2 "signifikante" Bits oder Flags hatte, die Sie gerade verwendeten, und Sie sie aus "Klarheit" nur in 3 Uchars organisiert haben, ist dies möglicherweise relativ "verschwenderischer", z eine Plattform mit 24-Bit-Uchars .....
Nichts, was Bitfelder nicht lösen können, aber sie müssen auf andere Dinge achten ...
In diesem Fall kann nur eine einzige Aufzählung eine Möglichkeit sein, die "kleinste" Ganzzahl zu erhalten, die Sie tatsächlich benötigen.
vielleicht kein wirkliches Beispiel, aber solche Sachen "haben" mich beim Portieren / Spielen mit Code "gebissen" .....
Nur die Tatsache, dass, wenn ein Uchar dreimal so groß ist wie "normalerweise" erwartet, 100 solcher Strukturen auf einigen Plattformen viel Speicher verschwenden könnten ... wo "normalerweise" keine große Sache ist ... .
Daher können die Dinge immer noch "kaputt" sein oder in diesem Fall "sehr schnell viel Speicher verschwenden", da angenommen wird, dass ein Ukar auf einer Plattform im Verhältnis zum verfügbaren RAM "nicht sehr verschwenderisch" ist als auf einer anderen Plattform ... ..
Das Problem könnte z. B. auch für Ints oder andere Typen auftreten, z. B. wenn Sie eine Struktur haben, die 15 Bit benötigt, also stecken Sie sie in ein Int, aber auf einer anderen Plattform ist ein Int 48 Bit oder was auch immer .... .
"normal" könnten Sie es in 2 Uchars aufteilen, aber zB mit einem 24-Bit-Uchar würden Sie nur einen brauchen .....
Eine Aufzählung könnte also eine bessere "generische" Lösung sein ...
hängt davon ab, wie Sie auf diese Bits zugreifen :)
Es kann also zu "Designfehlern" kommen, die ihren Kopf aufrichten ... selbst wenn der Code ungeachtet der Größe eines Ukar oder Uint immer noch einwandfrei funktioniert / läuft ...
Es gibt solche Dinge, auf die Sie achten müssen, obwohl Ihr Code keine "magischen Zahlen" enthält ...
hoffe das macht Sinn :)