本来は8ビット以下の符号化文字集合しか考慮していない時代のCにおいて、一つの文字を表現する型であった。
つまり、文字→character→char、というのが、そもそもの由来である。
が、今の時代にそのような無知は通用しない(ことになっている)。
C/C++では最低でも8ビット以上のビット幅を持つ整数型を意味するが、符号付きか符号なしかは処理系に依存する。
すべての環境を調査したわけではないが、gccは符号無しのunsigned charとなる実装が多いようだ。Microsoft C/C++では符号ありのsigned charである。
printfのフォーマット文字列は、標準的には%hhdなどを用いるが、C99以降でしか対応しない。
一般的には、unsigned intと同様に%dが使われる。
パーソナルコンピュータでは一般に8ビット長だが、DEC PDP-10、IBM 7090、ACOS-6の動作するNECのメインフレームなど、36ビットワードマシンでは1バイトが9ビットであり、charも9ビット長となっている。
ANSI Cの時代より、limit.hにおいて以下の6個のマクロ定数が定義されるようになった。これを利用すると、その環境での長さを得ることができる。
ISO Cには、次のtypedefが存在する。
typedef unsigned char int8_t;
Windowsでは、次のtypedefが存在する。
typedef char CHAR;