Как определить вариадный макрос рядом с невариадическим? - PullRequest
0 голосов
/ 09 июля 2019

Лучший способ - показать это с помощью кода.Я компилирую это как проект Win32 C ++ под Visual Studio 2017:

#include <strsafe.h>
#include <stdio.h>

//Trace outout
#ifdef _DEBUG
#define TRACE(s) ::OutputDebugString(s)
#define TRACE(s, ...) \
    { WCHAR __dbg_buff[1024]; if(SUCCEEDED(::StringCchPrintf(__dbg_buff, _countof(__dbg_buff), s, __VA_ARGS__))) { ::OutputDebugString(__dbg_buff);} else ASSERT(NULL);}
#else
#define TRACE(s) ((void)0)
#define TRACE(s, ...) ((void)0)
#endif

Идея состоит в том, чтобы использовать макрос в следующих двух случаях:

TRACE(L"value=%02X", v);
TRACE(L"\n");

Но мой макросопределение выдает эту ошибку:

warning C4005: 'TRACE': macro redefinition
note: see previous definition of 'TRACE'
error C2059: syntax error: ')'

Как определить ее так, чтобы она принимала как вариадную, так и не вариадическую форму?

...