c언어 독학 EOF
c언어 독학 EOF
취미생활로 c언어 독학을 하고 있는데 그동안 문자열을 입력받고 출력할 때는 scanf()와 printf() 함수를 이용했습니다. 하지만 이 녀석들은 메모리의 공간도 많이 차지하고 연산의 양이 많은 단점이 있어서 하나의 문자만 입력받고 출력할 때는 putchar, fputc, getchar, fgetc 함수를 이용하는 게 좋기 때문에 지난 글에서 이 함수들의 쓰임새를 대충 살펴봤습니다. 그런데 문자를 문자를 입. 출력 하는 함수인데 반환형이 int형인 게 좀 이상합니다.
int getchar(void);
int fgetc(FILE*stream);
■ 왜 반환형이 int형 일까요? 그 이유를 대충 살펴보겠습니다. C언어에는 파일의 끝을 표시하기 위해서 EOF(End Of File)라는 상수가 있습니다. 이 녀석은 -1로 정의되어 있고 파일을 대상으로 fgetc 함수가 호출되면 EOF가 반환되며 키보드를 대상으로 하는 입력에서는 호출에 실패하거나 "CTRL+Z(윈도우)" 키를 누를 때입니다.
예제에서 EOF의 존재를 확인해보겠습니다.
▲ 루프문을 끝내는 조건으로 EOF의 존재가 확인되면 문자열을 출력하고 빠져나오도록 하고 있는데요. 프로그램을 실행해서 문자열을 입력하다가 CTRL+Z를 눌러서 EOF의 존재를 확인하겠습니다.
▲ 예제처럼 EOF의 존재를 확인할 수 있습니다. 그리고 이 녀석은 -1이라는 상수라고 앞에서 정리했었는데요. c언어 컴파일러에는 unsigned char로 처리하는 컴파일러도 있기 때문에 반환형이 char형이면 컴파일 과정에서 양의 정수로 형 변환이 일어날 수도 있게 됩니다. 그래서 -1을 정확하게 인식할 수 있는 int형으로 반환이 되는 것입니다.
이렇게 해서 EOF의 존재와 하나의 문자 입출력 함수 putchar, fputc, getchar, fgetc의 반환형이 int형인 이유를 알아봤습니다. 수고하셨어요.