8ビット以外の文字を使用するプラットフォームにはどのような考慮事項がありますか?
マジックナンバーは、例えばシフト時に発生します。
これらのほとんどは、CHAR_BITや、8や255(または同様のもの)の代わりにUCHAR_MAXを使用することで、非常に簡単に処理できます。
うまくいけば、あなたの実装はそれらを定義します:)
それらは「一般的な」問題です.....
別の間接的な問題は、あなたが持っていると言うことです:
struct xyz {
uchar baz;
uchar blah;
uchar buzz;
}
これは、1つのプラットフォームで(最善の場合)24ビットを取るだけですが、他の場所ではたとえば72ビットかかる可能性があります。
各ucharが「ビットフラグ」を保持し、各ucharに現在使用している2つの「重要な」ビットまたはフラグしかなく、それらを「明確さ」のために3つのucharに編成した場合、比較的「より無駄」になる可能性があります。 24ビットucharを備えたプラットフォーム.....
ビットフィールドで解決できないものはありませんが、他にも注意する必要があるものがあります....
この場合、1つのenumだけで、実際に必要な「最小」サイズの整数を取得できます。
おそらく実際の例ではないかもしれませんが、このようなものは、コードを移植/再生するときに私に「ビット」を与えます。
ucharが「通常」予想されるものの3倍の大きさである場合、100のそのような構造は、一部のプラットフォームでは大量のメモリを浪費する可能性があるという事実だけです。 。
そのため、あるプラットフォームでは、利用可能なRAMと比較して、ucharは別のプラットフォームよりも「それほど無駄ではない」という仮定のため、物事はまだ「壊れている」可能性があります。 ..
問題は、たとえばintや他のタイプの場合にさらに顕著になる可能性があります。たとえば、15ビットを必要とする構造があるため、intに貼り付けますが、他のプラットフォームではintは48ビットなどです。 。
「通常」は2つのucharに分割する可能性がありますが、たとえば24ビットのucharでは1つだけ必要です。
したがって、列挙型の方が「一般的な」解決策になる可能性があります。
ただし、これらのビットにアクセスする方法によって異なります。
そのため、ucharやuintのサイズに関係なく、コードがまだ正常に動作する場合でも、「設計上の欠陥」が発生する可能性があります...
コードに「マジックナンバー」がなくても、このようなことに注意する必要があります...
これが理にかなっていると思います:)