我正在尝试使用 #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;
}
我在windows发行版(10)上通过mingway使用gcc。
gcc.exe (i686-posix-dwarf-rev0, Built by MinGW-W64 project) 7.3.0
#define SUB_CONCAT(a,b) a##b
#define CONCAT(a,b) SUB_CONCAT(a, b)
我找到了一个标题here
我已经知道maccro的名称在给定的标题中不相同, 我改变它以使帖子更明确
感谢@HolyBlackCat,他给了我一个working example。