C++ 프로그래밍

C++에서 stderr로 출력하기

하늘흐늘 2021. 10. 11. 22:34
반응형

요즘에도 stdout, stderr을 구분해서 출력하는지 모르겠지만 C/C++을 정석적으로 코딩한다면 에러 관련 내용은 stderr로 구분해서 출력하는 것이 좋다.
stdout과 stderr로 구분하여 출력하면 Unix(Linux) Shell이나 Dos Shell에서 필터링해서 구분해 볼 수 있다.
    
C 라면 아래와 같이 구분해서 출력할 수 있다. 물론 stdout을 사용한 부분은 그냥 printf을 사용해도 동일하다.

fprintf(stdout, "test0\n");
fprintf(stderr, "test1\n");

  
C++ 이라면 아래와 같이 구분해서 출력할 수 있다. 

cout << "test00" << endl;
clog << "test01" << endl;
cerr << "test02" << endl;



여기서 clog와 cerr는 둘 다 stderr로 출력을 하지만 cerr은 버퍼링하지 않고 clog은 버퍼링하는 것만 차이가 있다. 버퍼링은 간단히 말하여 하지 않으면 바로 출력하고 하게되면 성능이 좋아지는 차이가 있다. 두 객체다 사용법은 cout과 동일하다.

C/C++ 통합 예제는 아래와 같다.

#include <iostream>

using namespace std;

int main(int argc, char* argv[])
{
	fprintf(stdout, "test0\n");
	fprintf(stderr, "test1\n");
	cout << "test00" << endl;
	clog << "test01" << endl;
	cerr << "test02" << endl;

	return 0;
}

    

그냥 출력하면 결과가 아래와 같다.

test0
test1
test00
test01
test02

  

간단히 도스에서 {실행파일} 2> null 하여 일반 출력만 필터링하면 결과가 아래와 같다.

test0
test00

 

간단히 도스에서 {실행파일} 1> null 하여 에러 출력만 필터링하면 결과가 아래와 같다.

test1
test01
test02

 

반응형