2

看我的代码

#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");

它工作正常..

有没有办法用...(变量参数)编写调试来处理我不想传递任何变量的情况

4

2 回答 2

3

只需使用

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

可变参数宏,除了可变参数函数,不需要固定参数。

于 2011-07-28T11:37:58.357 回答
3

尝试

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

如果在第一个之后没有参数,则存在双哈希。

于 2011-07-28T11:32:31.883 回答