Как мне использовать макрос с переменными аргументами? - PullRequest
2 голосов
/ 28 июля 2011

см. Мой код

#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 ]

3 голосов
/ 28 июля 2011

Просто используйте

#define DPRINTF(...) debugPrintf(__VA_ARGS__)

макросы с переменным числом, кроме функций с переменным значением, не требуется фиксированный аргумент.

3 голосов
/ 28 июля 2011

Попробуйте

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

В случае отсутствия аргументов после первого есть двойной хэш.

...