#define with Variable参数用于调试

时间:2014-10-30 02:44:44

标签: c debugging

我有类似的打印

PrintMe(("abc %d",a));

Printme定义如下

#define Printme(_X_) printf _X_

但是现在我需要用一些带有变量参数的打印来映射它,比如

#define Printme(format , args ....)   PrintVar(30,format,##args)

Printvar有单个括号,Printme有双括号

如何映射

2 个答案:

答案 0 :(得分:1)

你可以这样做:

#define Printme(format, ...)   PrintVar(30, format, ##__VA_ARGS__)

文档(针对GCC):https://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html

答案 1 :(得分:0)

怎么样:

#define PRINTME2(fmt, ...) printvar(30, fmt, ##__VA_ARGS__)
#define PRINTME(_X_) PRINTME2 _X_

一个完整的例子:

#include <stdio.h>
#include <stdarg.h>

void printvar(int lvl, char * fmt, ...)
{
    printf("lvl %d:", lvl);                                                                         
    va_list argptr;
    va_start(argptr,fmt);
    vprintf(fmt, argptr);
    va_end(argptr);
}

#define PRINTME2(fmt, ...) printvar(30, fmt, ##__VA_ARGS__)
#define PRINTME(_X_) PRINTME2 _X_

int main(void)
{
    PRINTME(("I have %u apples\n", 3));
    return 0;
}

输出:

  

lvl 30:我有3个苹果