문자상수열 및 define문을 통한 디버그 출력시

AppleInc의 이미지

질문드립니다.

아래와 같이 디파인을 한 다음

//========================================================================
#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);

라스코니의 이미지

포함됩니다.
HOST_CHIPSET_CONFIG == HOST_CHIPSET_X86 가 만족하든 안하든 코드내에서 사용한 문자열 상수는 포함됩니다.

최적화에 따라서 달라질 수도 있겠으나 일반적인 상황이라면 포함되는게 맞습니다.

jick의 이미지

#if 조건을 만족하지 못하면 전처리기 단계에서 빠지니까, 포함되지 말아야 할 것 같은데요.

ymir의 이미지

// 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 』