문자상수열 및 define문을 통한 디버그 출력시
글쓴이: AppleInc / 작성시간: 월, 2013/04/29 - 8:55오전
질문드립니다.
아래와 같이 디파인을 한 다음
//========================================================================
#if (HOST_CHIPSET_CONFIG == HOST_CHIPSET_X86)
#define LOGPRINT(format,args...) \
do { \
printf("[%s:%d][%s]" format, __FILE__, __LINE__,__FUNCTION__ , ## args);\
} while(0)
#else
//do nothing.
#endif
//========================================================================
#if 조건절에 부합하지 않을때
하기와 같이 사용하게 될 경우 아래 구문의 문자열상수가 메모리에 잡히는지요?
LOGPRINT("cur state:%d prev state:%d\n",g_stState,g_stPrevState);
Forums:
어떤 경우에라도
포함됩니다.
HOST_CHIPSET_CONFIG == HOST_CHIPSET_X86 가 만족하든 안하든 코드내에서 사용한 문자열 상수는 포함됩니다.
최적화에 따라서 달라질 수도 있겠으나 일반적인 상황이라면 포함되는게 맞습니다.
...
#if 조건을 만족하지 못하면 전처리기 단계에서 빠지니까, 포함되지 말아야 할 것 같은데요.
음 ..
// do nothing 부분에.. 어떤 형태로든 LOGPRINT 에 관련된 define 이 있어야 컴파일이 되겠죠..
그 부분에
#define LOGPRINT(...) (void)0
와 같은 구문을 집어 넣었다면, 아예 코드상에 포함되지 않습니다.
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
댓글 달기