Как использовать переменные макросы? - PullRequest
0 голосов
/ 02 июня 2018

Я пытаюсь использовать переменные макросы.Я хочу, чтобы макрос 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...