C言語系のいろいろ

charを8ビットフルに正数として使う場合にunsignedは必要か
char型をint型に何かの理由でキャストするときにcharの最上位ビットが1だとマイナスの値のintになってしまう。
charは文字なんだから正数(と0)しか扱わない前程で処理してくれるかと早とちりすると危険。
NSLogやprintfの引数として渡すときに、値を見ようとして%dを使った時も同様。ちなみに%uにするとめちゃくちゃデカイ値が表示されてかなりわけのわからん状態になる。
iOSアプリの開発だとcharを使う機会はかなり少ないので見落としやすい。
また、unicharというのもあって、そっちはもとからunsignedで宣言されていて紛らわしい。
ということで正数と0のみの場合はcharでもunsignedは必要。

コメント