반응형
요즘에도 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
반응형
'C++ 프로그래밍' 카테고리의 다른 글
C++ invoke_result: return type 알아내기 (0) | 2021.10.31 |
---|---|
C++ static_assert (0) | 2021.10.30 |
error C3520: 'args': 이 컨텍스트에서 매개 변수 팩을 확장해야 합니다. (0) | 2021.10.28 |
C++ optional의 활용 (0) | 2021.10.24 |
C++ wstring용 가변인자 포맷(format) 스트링 만들기 (0) | 2021.10.08 |
More C++ Idioms (0) | 2017.02.19 |
64Bit Programming Models: Why LP64? (0) | 2009.08.22 |
C++ Technical Report 1 : Regular Expressions (0) | 2009.07.31 |