Как мне использовать макрос с переменными аргументами?
Смотри мой код
#include<stdarg.h>
#define DPRINTF(_fmt, ...) debugPrintf(_fmt,__VA_ARGS__)
void debugPrintf(const char *fmt, ...)
{
char buf[128];
va_list ap;
va_start(ap, fmt);
vsnprintf(buf, sizeof(buf), fmt, ap);
va_end(ap);
fprintf(stderr,"%s",buf);
return;
}
main()
{
int a=10;
DPRINTF("a is %d",a);
DPRINTF("WHY THIS STATEMENT GETS ERROR");
}
почему этот код нельзя компилировать.?? когда я комментирую
//DPRINTF("WHY THIS STATEMENT GETS ERROR");
это работает правильно..
Есть ли способ написать отладку с... (аргумент переменной), чтобы также обрабатывать такое условие, где я не хочу передавать любую переменную
2 ответа
Решение
Просто используйте
#define DPRINTF(...) debugPrintf(__VA_ARGS__)
Макросы с переменными числами, кроме функций с переменными числами, не требуют фиксированного аргумента.
Пытаться
#define FOO(fmt, ...) printf(fmt, ##__VA_ARGS__)
Двойной хеш существует в случае отсутствия аргументов после первого.