質問: に以下のコメントがあります。 > > We should replace most occurrences of char_u by uint8_t > > > char_uをuint8_tに変更する利点、char_uのままだとまずい点、とはどういうものでしょうか? char_u自体はビット数(8など)がわからない、というのがまずいのでしょうか? その他、移植の関係で変更をするのでしょうか?
回答: もうすでにベストアンサーも決まっているのでなぜuintX_t型を好んで使うかを説明します。 リンクの定義では以下のようになっていました。 ``` typedef unsigned char char_u; typedef unsigned short short_u; typedef unsigned int int_u; ``` unsignedを使う理由は右シフトで0が代入されることを期待してでしょう charからのuint8_tへの変換の理由はchar型は最低でも8ビットであるためです。 これは1バイトが必ず8ビットである訳ではない事を示しています。 そのため、処理系によりchar型が16ビットや32ビットでも良いことになります。 そこでもし、プログラムの設計者が8ビットを想定してプログラムを書いていたとしたら以下のような問題が発生します。例:16ビットのchar型が割り当てられた。 ``` 1000 0001 b 0000 0000 1000 0001 b ``` 左へ1ビットシフト ``` 0000 0010 b 0000 0001 0000 0010 b ``` 上では2となり下では258となり演算の結果がことなります。これはプログラムの設計者が意図した結果ではありません。 そのため、型の定義でビット数が固定されているものが必要になります。それがuintX_t型です。 この、uintX_t型はOSや通信のプログラムの中でよく利用されています。