質問: C言語を習いはじめてまもない者です。getcharとisalphaについて教えてください。 まず、getcharから。この関数は、キーボードから文字を一文字ずつ読み、読み出した文字を返す。といった働きをするそうですが、この関数を用いて、取り込んだ文字をなぜか、int型で宣言した変数に代入しています。(例:int aなどのaに取り込んだ文字を代入している。)なぜ、文字を取り込んでいるのに、intで宣言した変数に代入すのでしょうか?charで宣言した変数に代入しなくていいのですか? 次に、isalphaについてです。この関数は、変数に代入されている文字が数字か文字かを判断して、文字が入力されていると、0以外の値を返す関数だそうです。しかし、この関数も、変数の宣言がintです。なぜ、charではなくintで宣言するのでしょうか?
回答: 式と評価について調べてみてください。 C言語ではchar,shortは評価段階で暗黙にintへの格上げが行われます。 unsigned char unsigned shortはunsignedに、floatはdoubleに。 「EOFのあつかい」という側面が無いわけではありませんが、C言語の「暗黙の方変換」が席にあっての話です。 charがintへ格上げされるからEOFを返すことが可能となっているのです。 C言語FAQ11.3に『古い書き方の 宣言ではdoubleを使ったほうがわかりやすい)"狭い"(char、short int、float)型は、関数引数や戻り値としては避 けたほうが安全であろう。』とあるように古いタイプ(プロトタイプ宣言の無い)のCでは関数インターフェースにcharやshortは使いませんでした。 stdio(getcharが含まれる)やtypes(isalphaが含まれる)はこの時代に定義されたものであり、関数値/引数がint以上の幅を持つことが前提となっています。 C言語FAQ日本語訳のURLを紹介します。 あと、keronpasさんのお使いの参考書にそのあたりの解説が無いのなら別の参考書を見たほうがよいでしょう。 ウチのページでC/プログラミングの書籍を紹介していますので参考にしてください。 参考URL: