더북(TheBook)

1.7.6 I/O 오류 처리

처음부터 한 가지를 분명히 하고 싶다. C++의 I/O에는 안전장치가 없다(멍청한 건 말할 것도 없다). 여러 가지 방법으로 오류를 보고할 수 있으며 오류 처리는 해당 오류를 준수해야 한다. 다음 예제 프로그램을 실행해 보자.

int main()
{
    std::ifstream infile("some_missing_file.xyz");
    int i;
    double d;
    infile >> i >> d;
    std::cout << "i is " << i << ", d is " << d << ‘\n;
    infile.close();
}

파일은 존재하지 않지만 열기 동작은 실패하지 않는다. 존재하지 않는 파일을 읽을 수도 있으며, 그 뒤에도 프로그램을 계속 진행한다. 말할 필요도 없이 id의 값은 아무런 의미가 없다.

i is 1, d is 2.3452e-310

기본적으로 스트림은 예외를 발생시키지 않는다. 이렇게 된 역사적인 이유가 있는데, 스트림은 예외 처리보다 먼저 나왔기에 그동안 작성된 소프트웨어를 깨뜨리지 않도록 만들려고 했기 때문이이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.