Я пытаюсь использовать переменные макросы.Я хочу, чтобы макрос PRINTF вызывался из макроса MY_TOP_PRINTF.
1. Либо я получаю ошибку компиляции.
2.Если я удаляю ошибку компиляции, она печатает только 1-й аргумент.
Мой ожидаемый результат - 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);