http://cnicholson.net/2009/03/stupid-c-tricks-dowhile0-and-c4127/
참고하자.
난 위글중 덧글에서 제시한 false 를 리턴해주는 인라인 함수를 쓰는 방식을 사용중.
음 역시 워닝레벨 높이면 여러모로 피곤하다.
추가.
아래쪽 덧글에 false 리턴하는 인라인 함수를 부르는 코드가 최적화되면서 날아가지 않고 바이너리에 남는 다는 말이 있네. 좀더 읽어보고 써야 겠다.
헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤헤
2010년 7월 9일 금요일
2008년 10월 7일 화요일
variadic macro __VA_ARGS__ 를 이용한 간단한 로그 매크로
- http://oldpie.yoonkn.com/cgi-bin/moin.cgi/VariadicMacro 에 적었던 내용인데 이쪽으로 옮길겸 해서 새로 적어둔다.
- http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/cpp/variadic-macros.html 에 아주 잘나와있으니 참고.
개발도중 주석을 쓰느니 로그를 많이 남기는 편인데 항상 비슷한 코드들을 쓰게 되길래 걍 적어둔다. 나중에 필요하면 바로 베낄수 있도록.
#if 1
# define LOG(...) do { fprintf(stdout, "[LOG] " __VA_ARGS__); } while(0) // 일반적인 로그를 남길때
# define ERR(...) do { fprintf(stdout, "[ERR] " __VA_ARGS__); } while(0) // 에러를 남길때
# define WRN(...) do { fprintf(stdout, "[WRN] " __VA_ARGS__); } while(0) // 에러는 아니고 그냥 넘기기는 그런 것들
# define XXX(...) do { fprintf(stdout, "[XXX] " __VA_ARGS__); } while(0) // 이건 한창 디버깅중일때 일시적으로만
#else
# define LOG(...) do {} while(0)
# define ERR(...) do {} while(0)
# define WRN(...) do {} while(0)
# define XXX(...) do {} while(0)
#endif
로그를 너무 많이 찍어대서 눈에 잘 안보이면 안시코드를 쓰던가 하자.
fprintf(stdout, "\e[1;7m[ERR]\e[0m " __VA_ARGS__);
요딴식으로..
피드 구독하기:
글 (Atom)