'C++' stderr

토스트·2025년 5월 6일
0

'C++' basic

목록 보기
27/35

stdin : cin, wcin
stdout : cout, wcout

cerr, wcerr

사용자에게 즉시 보여줘야 하는 치명적인 오류를 출력할 때 사용합니다.
unbuffered 방식으로 출력할 때 마다 즉시 시스템 호출을 발생시키기 때문에, 성능 면에서 불리할 수 있습니다.

  • cerr : 좁은 문자 스트림의 오류 메시지를 출력 (일반 ASCII 문자 출력)
  • wcerr : 넓은 문자 스트림의 오류 메시지를 출력 (유니코드, 한글, 일본어 등 다국어 출력)
#include <iostream>

using namespace std;

int main() {
    cerr << "This is an error (narrow characters)." << endl;
    wcerr << L"이것은 에러입니다 (넓은 문자)." << endl;
    return 0;
}

clog, wclog

일반적인 정보나 경고와 같이 로그성 메시지에 적합합니다.
buffered 방식으로 버퍼에 잠시 저장 후 출력합니다.

  • clog : 좁은 문자 스트림으로 이루어진 로그 메시지를 출력
  • wclog : 넓은 문자가 포함된 로그 메시지를 출력

cout VS cerr VS clog

<예시> | 동일한 사용 방법

#include <iostream>

using namespace std;

int main() {
    cout << "toast1" << endl;
    cerr << "toast2" << endl;
    clog << "toast3" << endl;

    return 0;
}

결과값

cerr : 비버퍼링 방식이라 성능에 문제가 있고, 따로 기록이 필요 (별도의 리디렉션)
clog : 일반 출력과 혼합 시 가독성이 저하되고, 로그를 분리하려면 별도의 리디렉션이 필요
cout : 로그/에러용 메시지에는 적합하지 않음

cerr/clog는 에러나 로그용, cout은 일반 출력용으로 쓰는 것이 올바른 역할 분리입니다.
역할 분리를 통해 가독성 향상을 기대할 수 있습니다.

0개의 댓글