BohYoh.comトップページへ
C & C++ FAQ
目次

C C++ getcharの返却型は、なぜchar型ではなくint型なのですか。

 具体的な例をあげて解説しましょう。
 以下に示すのは、標準入力から読み込んできた文字を次々と、標準出力へと書き出すという、いわゆる《コピー》を行う有名なプログラムプログラムです。

#include <stdio.h> int main(void) { int ch; while ((ch = getchar()) != EOF) putchar(ch); return (0); }

 まずwhile文の( )の中の式

(ch = getcahr()) != EOF

に着目しましょう。まず、getcharによって読み込まれた文字がchに代入されます。C言語の代入式は、代入後の左オペランドの型と値をもつため、網掛け部はchと同じ値になります。
 次に、その値をEOFと比較します。!=は両方のオペランドが等しくなければ1、そうでなければ0という値を生成する等値演算子です。
 したがって、読み込んだ文字がEOFでない間、while文による繰返しが続けられることになります。C言語では、このような簡潔な表現が好まれて使われます。
 さて、char型である文字が0から255までの256種類であったとしましょう。getcharが返却する値は、それら256種類にEOFを加えた257種類ということになります。これだとchar型では表現できません。char型で表現できる数値に加えて余分な1個の値を表すためには、getcharは、charよりも大きい(表現範囲の広い)型でなければなりません。したがって、getcharはint型を返却するのです。

柴田望洋『C言語プログラミングの落とし穴』(p.234),ソフトバンク,1997に加筆修正。

戻る

BohYoh.comロゴ