[1805] Re:char hoge = 'A';
投稿者:yuya
2012/03/13 10:49:35
kitさん、ありがとうございます。
>いや、それは勘違いです。与れますよ。
>ファイルからコード 255 のバイトを getchar() で読むと、-1 ではなく 255 を返しますから。
あちゃ、まだ完全に分かってませんでした。
getc系の関数はストリームから得た文字をunsigned char型の値として解釈して、それをint型に変換するのでした。
つまり、「ア」の文字コードが 0xB1のとき、
文字定数'ア'の値がデフォルトcharによって異なる(signedならint型の-79、unsignedならint型の177になる)のに対し、
getcの戻り値は必ずint型の177になるのですね。
バイナリエディタで0xB1を書き込んだファイルを使って実験すると、
手元のVCでは 'ア' == getc() が偽になります。
はっきり言って「文字定数」と「getc系関数の戻り値」とは、ぜんっぜん違う!ということですね。
どちらも最終的にint型になるが、【値を解釈するときに】デフォルトcharに合わせるか、unsigned char固定か。
あれ?ということは、
int hoge = getchar();
if(hoge == 'a'){
/* ...... */
}
のほうが(C++ではなくCでは)処理系依存ということになるのですか?
「a」が「後半の」文字かもしれないことを考えると。