私はEOTがASCIIコード4で、EOFが-1(少なくともCでは)でエンコードされていることを知っています。私はEOFが-1にマッピングされるという事実を見つけるまで、EOTの同義語だと思いました。 EOFがEOTの代わりに-1にマッピングされるのはなぜですか?私が知っている限り、彼らはすべてファイルストリームを終了するのと同じことをします。私が見ることができる唯一の違いは、EOTがbashシェルでもコマンドを終了することです。私はこれら2つのコードの正確な技術的違いを説明したいと思います。
ベストアンサー1
通常、EOFは文字ではありません。足りない文字です。
プログラムがデフォルト設定を使用して標準モード(つまりstdioのみを使用する純粋なCプログラム)の端末で実行されている場合、ASCII文字EOTは表示されません。ターミナルドライバはこの文字を認識し、EOF条件(低レベルではゼロ戻り値read()
)を生成します。 stdioライブラリは、このEOF条件を関連関数(EOF
forのマクロgetchar()
、nullポインタfgets()
など)に適した戻り値に変換します。
マクロの数値は、Cライブラリを除くEOF
どこにも関係なく、EOF条件の意味を理解することには影響しません。