문제

멀리로 나가 알고,gcc 작성할 수 있습 같은 것:

#define DBGPRINT(fmt...) printf(fmt);

가를 할 수 있는 방법에 VC++?

도움이 되었습니까?

해결책

예 하지만 이후 VC++2005.에 대한 구문의 예:

#define DBGPRINT(fmt, ...) printf(fmt, __VA_ARGS__)

전체 참조 .

다른 팁

예,이 작업을 수행할 수 있습니 Visual Studio C++버전에서는 2005 년 넘어(확인에 대한 대 2003).살펴보 VA_ARGS.할 수 있습니다 기본적으로 다음과 같은 것이 가능합니다.

#define DBGPRINTF(fmt, ...)  printf(fmt, __VA_ARGS__)

그리고 변수를 인수하는 매크로 전달하는 기능을 제공으로'...'args 할 수 있는 그런 다음 우리에게 va_args 을 분석합니다.

가 될 수 있는 이상한 행동과 VA_ARGS 사용됩니다.기 VA_ARGS 은 변수,즉 수 있습 0arguments.을 남길 수 있는 당신과 함께 뒤에 오는 쉼표가 의도하지 않.

당신이 원하지 않는 경우 사용하는 표준이 아닌 확장,당신을 제공하기 위해 괄호:

#define DBGPRINT(args) printf(args);
DBGPRINT(("%s\n", "Hello World"));

당신이 찾고있는 무엇이라고[앞 매크로](http://msdn.microsoft.com/en-us/library/ms177415(VS.80).aspx).

요약의 링크:예에서,VC++2005 년에습니다.

지 않는 경우 실제로 필요한 모든 기능의 매크로(__FILE__, __LINE__,토큰 붙여넣기,etc.) 을 고려할 수 있습니다 쓰고 앞 기능을 사용하여 stdargs.h.을 호출하는 대신 printf(), 고,앞 함수를 호출할 수 있습 vprintf() 에 전달하기 위해 함께 인수 변수 목록입니다.

에 대한 MSVC7.1(.NET2003),이동:

#if defined(DETAILED_DEBUG)
#define DBGPRINT fprintf
#else
__forceinline void __DBGPRINT(...){}
#define DBGPRINT __DBGPRINT
#endif

다음과 같은 작업해야 합니다.(링크를 참조하십시오 앞 매크로)

(아래 예를 보여줍 고정된 변수다.)

#  define DBGPRINTF(fmt,...) \
    do { \
        printf(fmt, __VA_ARGS__); \
    } while(0)

검색에 대한"VA_ARGS"및 va_list 에 MSDN!

다.그것보다 더 추한 것이지만(그리고 당신은 아마 당신을 원하지 않는 끄는 세미콜론 매크로에서 자체:

#define DBGPRINT(DBGPRINT_ARGS) printf DBGPRINT_ARGS // note: do not use '(' & ')'

를 사용:

DBGPRINT(("%s\n", "Hello World"));

(가 누락되었는 한 쌍의 괄호).

지 모두 제외,원래 질문지 않은 상태의 버전 VC++,그리고 앞 매크로이 지원되지 않는 모든 컴파일러입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top