Я знаком с следующим способом создания макроса с переменным числом аргументов. Однако учтите:
#define MY_MACRO_N(value, format, ...) my_func(value, format, ##__VA_ARGS__)
#define MY_MACRO_0(value) my_func(value, NULL)
Где my_func
также принимает переменное число аргументов. Как я могу создать макрос MY_MACRO
, который инкапсулирует оба, так что:
MY_MACRO(my_value); // expand to my_func(my_value, NULL);
MY_MACRO(my_value, my_format); // expand to my_func(my_value, my_format);
MY_MACRO(my_value, my_format, a, b); // expand to my_func(my_value, my_format, a, b);
MY_MACRO(); // invalid
Переменное число аргументов нарушает подход GET_MACRO
, однако, похоже, должен быть способ сделать это.