밑의 인터넷에서 가져온 소스를 테스트 해봤지만, 몇몇 컴파일러에선 args... 이후 뭐냐고 에러를 뱉기도 합니다.
그럴경우엔
#define DEBUG_ON (TRUE)
#if DEBUG_ON
// 일반 printf처럼
#define debugMes(fmt, ...) printf(fmt, __VA_ARGS__)
// 이 메시지가 나올땐, 소스 파일의 이름, 함수, 라인수를 같이 출력
#define debugInfoMes(fmt, ...) printf( "[%s %s %d]" fmt, __FILE__, __FUNCTION__,__LINE__, __VA_ARGS__ )
#else
#define debugMes(fmt, ...)
#define debugInfoMes(fmt, ...)
#endif
식으로 매크로를 써주면 왠만한곳은 다 먹힙니다.
이하 긇어온곳 원본
/* -------------------------------------------------------
Printf를 이용한 debug
-------------------------------------------------------
2005.12.08 hugman@postech.ac.kr
원본출처 : http://cafe.naver.com/drv.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=25
다음과 같은 좋은 debug 방법이 있습니다.
프로그램은 매우 간단하므로 한번 살펴보시면 쉽게 파악
하실 수 있습니다.
팁이 있다면,
1) 프로그램을 다 완성하고, 이 debug를 아예 없애고 싶다면
공통 해더파일에
#define NDEBUG
라고 해주면, 컴파일시 해당부분이 없어지게 됩니다.
2) 컴파일 옵션으로 지울수도..
컴파일 옵션에 -DNDEBUG 라고 추가합니다.
예를 들어
CFLAGS += -Wall -O2 -g
라고 되어 있는 부분을
CFLAGS += -Wall -O2 -g -DNDEBUG
이렇게 말이죠.
++ 추가할점
VC++ 에서도 잘 작동하는지는 확인해봐야 합니다.
-------------------------------------------------------
*/
#include "iostream"
//#define NDEBUG
//printf( "%s %s %d ", __FILE__, __FUNCTION__, __LINE__ );
// --> source 파일 이름, function 이름, line 번호를 출력해줍니다.
#ifndef NDEBUG
#define dp(fmt,args...) printf( fmt, ## args )
#define dlp(fmt,args...) printf( "[%s %s %d]" fmt, __FILE__, __FUNCTION__,__LINE__, ## args )
#else
#define dp(fmt,args...)
#define dlp(fmt,args...)
#endif
int func2()
{
dlp(" ");
}
int main()
{
dlp(" ");
func2();
func2();
}
그럴경우엔
#define DEBUG_ON (TRUE)
#if DEBUG_ON
// 일반 printf처럼
#define debugMes(fmt, ...) printf(fmt, __VA_ARGS__)
// 이 메시지가 나올땐, 소스 파일의 이름, 함수, 라인수를 같이 출력
#define debugInfoMes(fmt, ...) printf( "[%s %s %d]" fmt, __FILE__, __FUNCTION__,__LINE__, __VA_ARGS__ )
#else
#define debugMes(fmt, ...)
#define debugInfoMes(fmt, ...)
#endif
식으로 매크로를 써주면 왠만한곳은 다 먹힙니다.
이하 긇어온곳 원본
/* -------------------------------------------------------
Printf를 이용한 debug
-------------------------------------------------------
2005.12.08 hugman@postech.ac.kr
원본출처 : http://cafe.naver.com/drv.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=25
다음과 같은 좋은 debug 방법이 있습니다.
프로그램은 매우 간단하므로 한번 살펴보시면 쉽게 파악
하실 수 있습니다.
팁이 있다면,
1) 프로그램을 다 완성하고, 이 debug를 아예 없애고 싶다면
공통 해더파일에
#define NDEBUG
라고 해주면, 컴파일시 해당부분이 없어지게 됩니다.
2) 컴파일 옵션으로 지울수도..
컴파일 옵션에 -DNDEBUG 라고 추가합니다.
예를 들어
CFLAGS += -Wall -O2 -g
라고 되어 있는 부분을
CFLAGS += -Wall -O2 -g -DNDEBUG
이렇게 말이죠.
++ 추가할점
VC++ 에서도 잘 작동하는지는 확인해봐야 합니다.
-------------------------------------------------------
*/
#include "iostream"
//#define NDEBUG
//printf( "%s %s %d ", __FILE__, __FUNCTION__, __LINE__ );
// --> source 파일 이름, function 이름, line 번호를 출력해줍니다.
#ifndef NDEBUG
#define dp(fmt,args...) printf( fmt, ## args )
#define dlp(fmt,args...) printf( "[%s %s %d]" fmt, __FILE__, __FUNCTION__,__LINE__, ## args )
#else
#define dp(fmt,args...)
#define dlp(fmt,args...)
#endif
int func2()
{
dlp(" ");
}
int main()
{
dlp(" ");
func2();
func2();
}
'C/C++언어' 카테고리의 다른 글
버츄얼과 오버라이드 차이 Virtual? Override? (0) | 2012.03.06 |
---|---|
Predefined Macros (0) | 2012.01.05 |
어셈블리 코드도 #if같은 메크로 분기시켜서 소스 관리하기. (0) | 2011.05.27 |
함수포인터를 이용한 콜백함수란? (0) | 2011.04.24 |
Doxygen을 사용한 코드 문서 쉽게 생성하기 (0) | 2010.07.04 |