jaki rodzaj uwagi warto poświęcić platformom z znakami innymi niż 8-bitowe?
magiczne liczby pojawiają się np. podczas przesuwania;
większość z nich można obsłużyć w prosty sposób, używając CHAR_BIT i np. UCHAR_MAX zamiast 8 i 255 (lub podobnych).
miejmy nadzieję, że Twoja implementacja je definiuje :)
to są „typowe” problemy .....
inną pośrednią kwestią jest to, że masz:
struct xyz {
uchar baz;
uchar blah;
uchar buzz;
}
może to zająć „tylko” (w najlepszym przypadku) 24 bity na jednej platformie, ale może zająć np. 72 bity w innym miejscu .....
jeśli każdy uchar trzymał "flagi bitowe" i każdy uchar miał tylko 2 "znaczące" bity lub flagi, których aktualnie używasz, i zorganizowałeś je tylko w 3 uchary dla "przejrzystości", wtedy może to być stosunkowo "bardziej marnotrawne" np. platforma z 24-bitowymi ucharami .....
nic bitfieldów nie może rozwiązać, ale mają inne rzeczy, na które trzeba uważać ....
w tym przypadku tylko jedno wyliczenie może być sposobem na uzyskanie „najmniejszej” liczby całkowitej, której faktycznie potrzebujesz ....
może nie jest to prawdziwy przykład, ale takie rzeczy „ugryzły” mnie podczas przenoszenia / grania z jakimś kodem…
tylko fakt, że jeśli uchar jest trzykrotnie większy niż to, co jest "normalnie" oczekiwane, 100 takich struktur może marnować dużo pamięci na niektórych platformach ..... gdzie "normalnie" to nie jest wielka sprawa .... .
więc rzeczy nadal mogą być "zepsute" lub w tym przypadku "marnować dużo pamięci bardzo szybko" z powodu założenia, że uchar jest "niezbyt marnotrawny" na jednej platformie w stosunku do dostępnej pamięci RAM, niż na innej platformie ... ..
problem może być bardziej widoczny, np. również w przypadku int, lub innych typów, np. masz strukturę, która wymaga 15 bitów, więc umieszczasz ją w int, ale na innej platformie int ma 48 bitów lub cokolwiek .... .
„normalnie” możesz podzielić to na 2 uchary, ale np. z 24-bitowym uchar potrzebujesz tylko jednego .....
więc wyliczenie może być lepszym rozwiązaniem „ogólnym” ...
zależy jednak od tego, w jaki sposób uzyskujesz dostęp do tych bitów :)
więc mogą istnieć "wady projektowe", które odwracają ich głowę ... nawet jeśli kod może nadal działać / działać dobrze, niezależnie od rozmiaru uchar lub uint ...
są takie rzeczy, na które trzeba uważać, mimo że w Twoim kodzie nie ma „magicznych liczb” ...
mam nadzieję, że to ma sens :)