che tipo di considerazione vale la pena dare alle piattaforme con caratteri non a 8 bit?
si verificano numeri magici, ad es. quando si sposta;
la maggior parte di questi può essere gestita semplicemente usando CHAR_BIT e ad esempio UCHAR_MAX invece di 8 e 255 (o simili).
speriamo che la tua implementazione li definisca :)
quelli sono i problemi "comuni" .....
un altro problema indiretto è che hai:
struct xyz {
uchar baz;
uchar blah;
uchar buzz;
}
questo potrebbe "solo" prendere (nel migliore dei casi) 24 bit su una piattaforma, ma potrebbe richiedere ad esempio 72 bit altrove .....
se ogni uchar contenesse "bit flags" e ogni uchar avesse solo 2 bit o flag "significativi" che stavi attualmente utilizzando, e li organizzassi solo in 3 uchar per "chiarezza", allora potrebbe essere relativamente "più dispendioso" ad es. una piattaforma con uchar a 24 bit .....
niente campi di bit non possono risolvere, ma hanno altre cose a cui fare attenzione ....
in questo caso, solo un singolo enum potrebbe essere un modo per ottenere il numero intero "più piccolo" di cui hai effettivamente bisogno ....
forse non è un vero esempio, ma cose come questa mi "mordono" durante il porting / giocando con un po 'di codice .....
solo il fatto che se un uchar è tre volte più grande di quello che è "normalmente" previsto, 100 di tali strutture potrebbero sprecare molta memoria su alcune piattaforme ..... dove "normalmente" non è un grosso problema .... .
quindi le cose possono ancora essere "rotte" o in questo caso "sprecare molta memoria molto rapidamente" a causa del presupposto che un uchar sia "non molto dispendioso" su una piattaforma, rispetto alla RAM disponibile, che su un'altra piattaforma ... ..
il problema potrebbe essere più evidente, ad esempio anche per gli ints o altri tipi, ad esempio hai una struttura che ha bisogno di 15 bit, quindi lo inserisci in un int, ma su un'altra piattaforma un int è di 48 bit o altro .... .
"normalmente" potresti dividerlo in 2 uchar, ma ad esempio con un uchar a 24 bit ne avresti bisogno solo uno .....
quindi un enum potrebbe essere una migliore soluzione "generica" ....
dipende da come stai accedendo a quei bit :)
quindi, potrebbero esserci "difetti di progettazione" che alzano la testa ... anche se il codice potrebbe ancora funzionare / funzionare bene indipendentemente dalle dimensioni di un uchar o uint ...
ci sono cose come queste a cui prestare attenzione, anche se non ci sono "numeri magici" nel tuo codice ...
spero che questo abbia senso :)