Да, вы можете сделать это в Visual Studio C ++ в версиях 2005 и выше (не уверен насчет VS 2003). Взгляните на VA_ARGS . Вы можете сделать что-то вроде этого:
#define DBGPRINTF(fmt, ...) printf(fmt, __VA_ARGS__)
и переменные аргументы макроса будут переданы функции, представленной как '...' args, где вы можете затем использовать va_args для их анализа.
Может быть странное поведение с VA_ARGS и использованием макросов. Поскольку VA_ARGS является переменной, это означает, что может быть 0 аргументов. Это может оставить вас с запятыми, где вы не собирались.