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
반응형