にint型や文字を比較割り当てることができます。上記のプログラムではc
タイプをint
として割り当てました。そして、最も重要なことに、EOF
は、ヘッダ機能で定義された定数であるinteger
です。今は、なぜ私は/私はこのようなコードを持っているC
このような何かにコードが変更された場合:
#include <stdio.h>
main()
{
char c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}
このコードでも動作します! Cのドキュメントの通り、getchar()
がint
を返しますが、上記のコードではchar
に保存しています。そしてCコンパイラはエラーを投げません。またwhile
ループで私はchar
であるc
とであるEOF
を比較しており、コンパイラはエラーをスローせず、プログラムは実行されます。
なぜ上記の2つのケースでコンパイラがエラーをスローしないのですか?
ありがとうございます。
Cは動的ではなく、数値型間の暗黙のキャストを許可します。 2番目のコードは '\ xFF'という文字をEOF(EOF == -1のシステムでは)と解釈しますが、最初の文字はそうではありません。なぜなら、' getchar'がintを使う理由です。 – ughoavgfhw
なぜdownvote? –
@ughoavgfhw私は '\ xFF'である必要はなく、' char'が符号なしのマシンでは、無限ループとしてコンパイルされるかもしれません。 –