signed, unsigned
文字やバイト列(バイナリ)を扱う時には必ずchar。
扱う数値の範囲が1byte以下でそれ以上の容量は必要ない時はunsinged char。
- charは処理系によってsignedかunsingedか違う
- char, singed char, unsinged char はそれぞれ違う型として定義されている。(char != singed char)
- charのみに限らない話:
-
- 違う型で数値比較すると返る値は処理系定義
-
- 代入式の型は,左辺側の型となる。[C99, 6.5.16, 3]
-
- 右辺側の値は,代入式の型に変換される。[C99, 6.5.16.1, 2]
- ようするに:
-
- 違う型を比較しない。どうしてもしたい時は明示的にキャストして、
その動作が処理系によって違ったり、ビットがどう動くかまで把握しなければならない。
- 違う型を比較しない。どうしてもしたい時は明示的にキャストして、
あとコンパイラの警告は無視しない。
コンパイラの警告レベルは最高にして、それでも警告が出なくなるまで修正する。
引用元:
http://d.hatena.ne.jp/ha-tan/20070930/1191150366
http://okuyama.mt.tama.hosei.ac.jp/unix/C/slide21-1.html