Я пытаюсь сгенерировать вызов функции с помощью # define
У меня есть несколько наборов функций
void foo1(whateverType a);
void foo2(whateverType a, whaterverType b);
... до
void foo4(... a, ...b, ...c, ...d);
То, что я пытаюсь сделать, - это макрос, который будет выбирать правильный вызов функции в зависимости от того, сколько параметров передано макросу.
В основном я пробовал что-то вродеэто и все вокруг
# define genFunCall(...) genFunctionName(__VA_ARGS__)(__VA_ARGS__)
, где genFunctionName равно
# define genFunctionName(...) CONCAT(foo, COUNT_VA_ARGS(__VA_ARGS__))
без успеха.
(COUNT_VA_ARGS и CONCAT оба указаны ниже)
Может быть, это поможет: #define
, который я использую (COUNT_VA_ARGS), работает с использованием непосредственно в вызове функции, например
printf("%d\n", COUNT_VA_ARGS(10, 10, 10, 10));
, но не при использовании через некоторые другие макросы.
конечная цель - вызвать его в коде, подобном следующему:
int main() {
genFunCall(1, 2, 3, 4);
return 0;
}
Я использую gcc via mingway в дистрибутиве Windows (10).gcc.exe (i686-posix-dwarf-rev0, Built by MinGW-W64 project) 7.3.0
Concat
#define SUB_CONCAT(a,b) a##b
#define CONCAT(a,b) SUB_CONCAT(a, b)
COUNT_VA_ARGS
Я нашел заголовок, который делает счет здесь
IЯ уже знаю, что имя макрокоманды не совпадает в названии, поэтому я изменил его, чтобы сделать пост более явным
РЕШЕНИЕ
Спасибо @HolyBlackCat, который дал мне рабочий пример .