8 bitlik olmayan char'lı platformlara ne tür bir dikkat göstermeye değer?
sihirli sayılar, örneğin kaydırma yaparken ortaya çıkar;
bunların çoğu CHAR_BIT ve örneğin 8 ve 255 yerine UCHAR_MAX (veya benzeri) kullanılarak oldukça basit bir şekilde ele alınabilir.
umarım uygulamanız bunları tanımlar :)
bunlar "ortak" konular .....
başka bir dolaylı sorun var:
struct xyz {
uchar baz;
uchar blah;
uchar buzz;
}
bu "yalnızca" bir platformda 24 bit alabilir, ancak başka bir yerde 72 bit alabilir .....
eğer her uchar "bit bayrakları" tutmuşsa ve her uchar şu anda kullandığınız 2 "önemli" bit veya bayrağa sahipse ve bunları "netlik" için sadece 3 uchars halinde organize ettiyseniz, o zaman göreceli olarak "daha israflı" olabilir. 24-bit uchars ile bir platform .....
hiçbir şey bitfields çözemez, ama dikkat edilmesi gereken başka şeyler var ....
Bu durumda, sadece tek bir enum aslında ihtiyacınız olan "en küçük" boyutlu tamsayı almak için bir yol olabilir ....
belki gerçek bir örnek değil, ama bu gibi şeyler "biraz" taşıma / bazı kod ile oynarken .....
sadece bir uchar "normalde" beklendiği gibi üç kat büyükse, 100 gibi yapıları bazı platformlarda çok fazla bellek israf ..... ..... "normalde" büyük bir anlaşma değildir .... .
bu yüzden bir uchar'ın bir platformda, mevcut RAM'e göre, başka bir platforma göre "çok israflı olmadığı" varsayımı nedeniyle işler hala "kırılabilir" veya bu durumda "çok fazla bellek harcar" ... ..
sorun, örneğin ints veya diğer tipler için daha belirgin olabilir, örneğin 15 bit'e ihtiyaç duyan bir yapıya sahipsiniz, bu yüzden bir int'e yapışırsınız, ancak başka bir platformda int 48 bit veya başka bir şeydir .... .
"normalde" 2 uchars kırmak olabilir, ama örneğin 24-bit uchar ile sadece bir gerekir .....
böylece bir enum daha iyi bir "genel" bir çözüm olabilir ....
yine de bu bitlere nasıl eriştiğinize bağlıdır :)
Bu nedenle, başlarını arkada "tasarım kusurları" olabilir .... kod bir uchar veya uint boyutundan bağımsız olarak hala iyi çalışabilir / çalışsa bile ...
kodunuzda "sihirli sayılar" olmamasına rağmen dikkat edilmesi gereken şeyler var ...
umarım bu mantıklıdır :)