สิ่งที่ควรคำนึงถึงในการพิจารณาให้กับแพลตฟอร์มที่ไม่ใช่ถ่าน 8 บิต
จำนวนเวทมนตร์เกิดขึ้นเช่นเมื่อขยับ;
ส่วนใหญ่สามารถจัดการได้ง่ายๆโดยใช้ CHAR_BIT และเช่น UCHAR_MAX แทน 8 และ 255 (หรือคล้ายกัน)
หวังว่าการติดตั้งของคุณจะเป็นตัวกำหนด :)
เหล่านี้คือปัญหา "ทั่วไป" .....
ปัญหาทางอ้อมอีกอย่างหนึ่งก็คือคุณมี:
struct xyz {
uchar baz;
uchar blah;
uchar buzz;
}
สิ่งนี้อาจใช้ "เพียง" (กรณีที่ดีที่สุด) 24 บิตบนแพลตฟอร์มเดียว แต่อาจใช้เวลาเช่น 72 บิตที่อื่น .....
หาก uchar แต่ละคนถือ "ธงบิต" และ uchar แต่ละคนมีบิตหรือธงที่มีนัยสำคัญ "2" ที่คุณใช้อยู่และคุณจัดระเบียบพวกเขาเป็น 3 uchars สำหรับ "ชัดเจน" ดังนั้นมันอาจจะค่อนข้าง "เสียมากกว่า" เช่นใน แพลตฟอร์มที่มี uchars 24 บิต .....
ไม่มีอะไร bitfields ไม่สามารถแก้ไขได้ แต่พวกเขามีสิ่งอื่น ๆ ที่ต้องระวัง ....
ในกรณีนี้เพียงแค่ enum เพียงอันเดียวอาจเป็นวิธีที่จะได้จำนวนเต็มที่น้อยที่สุดที่คุณต้องการ ....
อาจไม่ใช่ตัวอย่างจริง แต่สิ่งนี้ "บิต" ฉันเมื่อย้าย / เล่นด้วยรหัสบางอย่าง .....
ความจริงที่ว่าถ้า uchar นั้นใหญ่กว่าสามเท่าที่คาดไว้ "ปกติ" 100 โครงสร้างดังกล่าวอาจเสียหน่วยความจำจำนวนมากในบางแพลตฟอร์ม ..... ที่ "ปกติ" ไม่ใช่เรื่องใหญ่ .... .
ดังนั้นสิ่งต่าง ๆ ยังสามารถ "เสีย" หรือในกรณีนี้ "เสียหน่วยความจำจำนวนมากอย่างรวดเร็ว" เนื่องจากข้อสันนิษฐานว่า uchar คือ "ไม่สิ้นเปลือง" ในแพลตฟอร์มหนึ่งเทียบกับ RAM ที่มีอยู่มากกว่าบนแพลตฟอร์มอื่น ... ..
ปัญหาอาจเด่นกว่าเช่นสำหรับ ints เช่นกันหรือชนิดอื่น ๆ เช่นคุณมีโครงสร้างบางอย่างที่ต้องการ 15 บิตดังนั้นคุณจึงติดอยู่ใน int แต่บนแพลตฟอร์มอื่น ๆ บางแห่ง int คือ 48 บิตหรืออะไรก็ตาม ... .
"ปกติ" คุณอาจแบ่งออกเป็น 2 uchars แต่เช่นด้วย uchar แบบ 24 บิตคุณต้องใช้เพียง .....
ดังนั้น enum อาจเป็นทางออกที่ดีกว่า "ทั่วไป" ....
ขึ้นอยู่กับว่าคุณเข้าถึงบิตเหล่านั้นอย่างไร :)
ดังนั้นอาจมี "ข้อบกพร่องการออกแบบ" ที่อยู่ด้านหลังศีรษะของพวกเขา .... แม้ว่ารหัสอาจยังทำงาน / ทำงานได้ดีโดยไม่คำนึงถึงขนาดของ uchar หรือ uint ...
มีบางอย่างที่ต้องระวังแม้ว่าจะไม่มี "หมายเลขเวทมนตร์" ในรหัสของคุณ ...
หวังว่ามันจะสมเหตุสมผล :)