C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[777] __FILE__을 이용해서 로그를 찍을 때 순수 파일명만 찍는 방법
이경문 [gilgil] 13918 읽음    2008-07-08 16:51
#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  불리나, 안불리나. 아~ 이 얼마나 좋은가?   세상은 정말 알흠다구나~~~");




















































































































저 천재죠?

























































































































돌 던지지 마세요. ㅠㅠ
애로스 [xcode9]   2008-07-16 09:44 X
파일 name을 define해서 사용하지 않고 __FILE__을 사용하는 이유는
파일 Name이 변경 되었을때 따로 code를 수정해 주지 않기 위해서인데.....
김태선 [cppbuilder]   2008-07-16 21:38 X
이거 놀라운 팁인데요.

이경문님도 델파이 VC++, C++Builder를 넘나드시는 모양이군요. 주력은 델파이고.
저도 델파이 VC++, C++Builder를 넘나들고 있습니다. 주력은 C++Builder 이고요.
이경문 [gilgil]   2008-07-19 13:49 X
ㅎㅎ, 팁 써 놓고 나서 지금 와서 보니 지울까 하는 민망함이 보이는군요. ㅠㅠ
특별히 언어는 가리는 스타일은 아닙니다. 잡식성이라서... ^^
김태선 [jsdkts]   2008-07-21 11:57 X
자그마한 팁도 때로는 누군가에게 큰 도움이 되는 법이죠

^^;

+ -

관련 글 리스트
777 __FILE__을 이용해서 로그를 찍을 때 순수 파일명만 찍는 방법 이경문 13918 2008/07/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.