가를 작성하는 방법이 매크로를 가진 변수 목록에 visual C++?
-
09-06-2019 - |
문제
멀리로 나가 알고,gcc 작성할 수 있습 같은 것:
#define DBGPRINT(fmt...) printf(fmt);
가를 할 수 있는 방법에 VC++?
해결책
다른 팁
예,이 작업을 수행할 수 있습니 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++,그리고 앞 매크로이 지원되지 않는 모든 컴파일러입니다.