밑의 인터넷에서 가져온 소스를 테스트 해봤지만, 몇몇 컴파일러에선 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();
}

+ Recent posts