레이블이 macro인 게시물을 표시합니다. 모든 게시물 표시
레이블이 macro인 게시물을 표시합니다. 모든 게시물 표시

2010년 8월 25일 수요일

do {...} while(0) 와 C4127 워닝

http://cnicholson.net/2009/03/stupid-c-tricks-dowhile0-and-c4127/

참고하자.
난 위글중 덧글에서 제시한 false 를 리턴해주는 인라인 함수를 쓰는 방식을 사용중.

음 역시 워닝레벨 높이면 여러모로 피곤하다.


추가.
아래쪽 덧글에 false 리턴하는 인라인 함수를 부르는 코드가 최적화되면서 날아가지 않고 바이너리에 남는 다는 말이 있네. 좀더 읽어보고 써야 겠다.

2010년 7월 9일 금요일

C/C++ predefined macro

http://predef.sourceforge.net/

이거 항상 급할때 찾으면 잘 안보이네
여기도 적어둔다

2008년 10월 7일 화요일

variadic macro __VA_ARGS__ 를 이용한 간단한 로그 매크로


개발도중 주석을 쓰느니 로그를 많이 남기는 편인데 항상 비슷한 코드들을 쓰게 되길래 걍 적어둔다. 나중에 필요하면 바로 베낄수 있도록.
#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__);
요딴식으로..