какое внимание стоит уделить платформам с не-8-битным символом?
магические числа возникают, например, при смещении;
большинство из них могут быть обработаны довольно просто с помощью CHAR_BIT и, например, UCHAR_MAX вместо 8 и 255 (или аналогичных).
надеюсь, ваша реализация определяет их :)
это "общие" вопросы .....
другая косвенная проблема - скажем, у вас есть:
struct xyz {
uchar baz;
uchar blah;
uchar buzz;
}
это может «только» занять (в лучшем случае) 24 бита на одной платформе, но может занять, например, 72 бита в другом месте .....
если каждый uchar содержит «битовые флаги», а каждый uchar имеет только 2 «значимых» бита или флага, которые вы в настоящее время используете, и вы только организовали их в 3 uchars для «ясности», то это может быть относительно «более расточительным», например, на платформа с 24-битными учарами .....
ничто битовое поле не может решить, но у них есть другие вещи, на которые стоит обратить внимание ....
в этом случае, только одно перечисление может быть способом получения «наименьшего» целого числа, которое вам действительно нужно ....
возможно, не реальный пример, но такие вещи "кусают" меня при портировании / воспроизведении некоторого кода .....
просто тот факт, что если uchar в три раза больше того, что "обычно" ожидается, 100 таких структур могут тратить много памяти на некоторых платформах ..... где "обычно" это не имеет большого значения .... ,
так что все еще можно «сломать» или в этом случае «очень быстро потратить много памяти» из-за предположения, что uchar «не очень расточительно» на одной платформе по сравнению с доступной оперативной памятью, чем на другой платформе ... ..
проблема может быть более заметной, например, для целых чисел или других типов, например, у вас есть структура, которая требует 15 битов, поэтому вы помещаете ее в int, но на какой-то другой платформе int составляет 48 бит или что-то еще .... ,
«обычно» вы можете разбить его на 2 учара, но, например, с 24-битным учаром вам понадобится только один .....
так что enum может быть лучшим "общим" решением ....
зависит от того, как вы получаете доступ к этим битам, хотя :)
таким образом, могут быть "недостатки дизайна", которые поднимают их голову .... даже если код все еще может работать / работать нормально независимо от размера uchar или uint ...
есть такие вещи, на которые стоит обратить внимание, хотя в вашем коде нет «магических чисел» ...
надеюсь, что это имеет смысл :)