我有类似的打印
PrintMe(("abc %d",a));
Printme定义如下
#define Printme(_X_) printf _X_
但是现在我需要用一些带有变量参数的打印来映射它,比如
#define Printme(format , args ....) PrintVar(30,format,##args)
Printvar有单个括号,Printme有双括号
如何映射
答案 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个苹果