如何使用可变参数宏?

时间:2018-06-01 23:04:30

标签: c++ macros

我正在尝试使用可变参数宏。我希望从MY_TOP_PRINTF宏调用PRINTF宏。

1.我是否收到编译错误。

2.如果我删除了编译错误,它只打印第一个参数。

我的预期结果为Inside TOP_PRINT dog here 4

#include <iostream>
#include <cstdio>

using namespace std;


#define PRINTF(str, ...)  {                             \
    fprintf(stderr, (str), ##__VA_ARGS__);              \
}


#define MY_TOP_PRINTF(EXPRESSION, ...) {                \
    PRINTF("Inside TOP_PRINT ", EXPRESSION, __VA_ARGS__);\
}


int main()
{
    int x = 4;
    char str[255] = "dog here";

    MY_TOP_PRINTF(str,x);
    return 0;
}

错误:

hello_temp.cpp: In function ‘int main()’:
hello_temp.cpp:8:41: warning: too many arguments for format [-Wformat-extra-args]
     fprintf(stderr, (str), ##__VA_ARGS__);  \
                                         ^
hello_temp.cpp:13:5: note: in expansion of macro ‘PRINTF’
     PRINTF("Inside TOP_PRINT", EXPRESSION, __VA_ARGS__);\
     ^
hello_temp.cpp:23:2: note: in expansion of macro ‘MY_TOP_PRINTF’
  MY_TOP_PRINTF(str,x);

0 个答案:

没有答案