#define TRACE( _x, ...) printf("[%s:%d] "_x"\n", __FILENAME__, __LINE__, __VA_ARGS__)
-------------------- a.cpp --------------------
TRACE("로그를 찍어 봅시다");
->
[c:\temp\vc\test\a.cpp:16] 로그를 찍어 봅시다
이렇게 나오죠. __FILE__ 이라는 매크로가 path 까지 다 포함되어 있기 때문에 로그를 볼때 조금 지저분해 질 수가 있습니다.
그래서 사용하는 것이 바로 __FILENAME__ 이라는 매크로를 따로 정의해서 사용하는 것입니다.
#define __FILENAME__ (strrchr(__FILE__,'\\')+1)
요렇게 정의를 해 놓고 TRACE 구문에서 __FILE__ 을 __FILENAME__으로 바꾸어 주면 다음과 같이 출력이 됩니다.
-------------------- a.cpp --------------------
TRACE("로그를 찍어 봅시다");
->
[a.cpp:16] 로그를 찍어 봅시다
그런데 여기에서 문제는 __FILENAME__ 매크로가 실행이 되면서 strrchr 이라는 함수가 부린다는 것인데요, __FILENAME__ 이라는 매크로를 컴파일러에서 지원해 주면 제일 좋겠지만, 그러지 못한다는 이유로 로그를 찍을 때마다 strrchr이라는 함수가 불린다는 것은(큰 부하는 아니지만) 프로그램 실행에 약간의 껄쩍찌근한 면이 없지 않습니다.
그래서 제가 생각해 낸 것이 있습니다.
바로~~~
TRACE를 사용하는 각각의 cpp 파일마다 제일 위에 __FILENAME__을 정의하는 것입니다. *^^*
-------------------- a.cpp --------------------
#ifndef __FILENAME__
#define __FILENAME__ "a.cpp"
#endif __FILENAME__
TRACE("로그 아무리 찍어바바 strrchr 불리나, 안불리나. 아~ 이 얼마나 좋은가? 세상은 정말 알흠다구나~~~");
저 천재죠?
돌 던지지 마세요. ㅠㅠ
|
파일 Name이 변경 되었을때 따로 code를 수정해 주지 않기 위해서인데.....