1. ホーム
  2. c++

[解決済み] 8bit char以外を搭載しているプラットフォームは?

2022-05-08 02:25:53

質問内容

時々、SOで誰かが指摘するのですが char (バイト)は必ずしも8ビットではありません。 .

どうやら8ビット char はほぼ全世界共通です。私は、主流のプラットフォームでは、8ビットの char 市場で存続させるためです。

現在も歴史的にも、どのようなプラットフォームで char また、なぜ通常の8ビットと異なるのでしょうか?

コードを書く際に、(汎用ライブラリなどの)クロスプラットフォーム対応を考える場合、8ビットでないプラットフォームに対してどのような配慮が必要でしょうか。 char ?

過去に、アナログ・デバイセズ社のDSPで char は16ビットです。DSPはちょっとニッチなアーキテクチャなんでしょうね。(なお、当時は手書きのアセンブラがCコンパイラの性能に簡単に勝っていたので、そのプラットフォームでのC言語の経験はあまりありません)。

どのように解決するのか?

char は、OMAP2などで登場したTexas Instruments社のC54x DSPでも16bitです。他にも16ビットや32ビットのDSPがあります。 char . 24bitのDSPも聞いたことがあるような気がしますが、何だか思い出せないので気のせいかもしれませんね。

もう一つの考慮点は、POSIXが義務付けている CHAR_BIT == 8 . だから、POSIXを使っているならば、それを前提にすればいい。後で誰かがあなたのコードをPOSIXの実装に近いものに移植する必要が出てきたとき、たまたまあなたが使っている関数が別の大きさの char それは運が悪いとしか言いようがない。

しかし、一般的には、問題を考えるよりも、問題を回避する方が簡単な場合がほとんどだと思うのです。ただ CHAR_BIT . 正確な8ビット型が必要な場合は int8_t . あなたのコードは、期待しないサイズを黙って使うのではなく、それを提供しない実装では騒々しくコンパイルに失敗します。少なくとも、それを仮定する正当な理由がある場合は、それを主張することになるでしょう。