Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 표준 오류 스트림(std::cerr)이란? 개념부터 사용 예제까지

std::cerr란 무엇인가?

std::cerrostream 클래스의 객체로, char 타입의 좁은 문자(narrow character)를 위한 표준 오류 스트림(standard error stream)을 나타냅니다. C 언어의 stderr 스트림에 대응하며, 이 스트림의 출력 목적지는 프로그램이 실행되는 환경에 따라 결정됩니다. 또한 이 목적지는 cout이나 clog처럼 다른 표준 객체와 공유될 수도 있습니다.

std::cerr의 주요 특징

std::cerr는 ostream 클래스의 객체이므로 다음 두 가지 방식으로 문자를 출력할 수 있습니다.

1. 삽입 연산자(operator<<)를 사용한 형식화된(formatted) 데이터 출력
2. write()와 같은 멤버 함수를 사용한 비형식화된(unformatted) 데이터 출력

std::cerr는 <iostream> 헤더에 외부 연결(external linkage)과 정적 저장 기간(static duration)으로 선언되어 있으며, 그 덕분에 프로그램이 시작될 때 생성되어 종료될 때까지 전체 실행 기간 동안 유효합니다.

cout과 cerr의 차이점

일반적인 데이터 출력에는 cout을, 오류 메시지 출력에는 cerr을 사용하는 것이 일반적인 관례입니다. 두 객체의 가장 큰 차이는 버퍼링 여부입니다. cout은 내부 버퍼에 출력 내용을 모았다가 한 번에 내보내는 방식이라 출력 시점이 늦어질 수 있지만, cerr은 기본적으로 버퍼링되지 않아(unbuffered) 오류 메시지가 즉시 화면에 출력됩니다. 따라서 프로그램이 갑자기 비정상 종료되더라도 오류 메시지를 놓치지 않고 확인할 수 있다는 장점이 있습니다.

사용 예제

std::cerr를 사용하면 화면에 문자열을 출력할 수 있습니다. 예를 들어 화면에 "Hello"를 출력하고 싶다면 다음과 같이 코드를 작성합니다.

#include<iostream>
int main() {
    std::cerr << "Hello";
    return 0;
}

위 코드를 hello.cpp 파일로 저장한 뒤, 터미널(cmd)에서 파일이 저장된 위치로 이동하여 다음 명령어로 컴파일합니다.

$ g++ hello.cpp

컴파일이 완료되면 아래 명령어로 프로그램을 실행합니다.

$ ./a.out

실행 결과

프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

Hello

마무리 정리

std::cerr는 오류 메시지를 빠르고 확실하게 전달하기 위한 C++의 표준 오류 스트림입니다. 디버깅 시 유용하게 활용할 수 있으며, 일반 출력(cout)과 구분하여 사용하면 로그 분석과 오류 추적이 훨씬 수월해집니다.