首页 > 解决方案 > 使用宏生成可变参数函数调用

问题描述

我正在尝试使用#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)

COUNT_VA_ARGS

我找到了一个可以在这里计数的标题

我已经知道给定标题中的宏名称不同,我对其进行了更改以使帖子更加明确


解决方案

感谢@HolyBlackCat,他给了我一个工作示例

标签: cmacrosc-preprocessorfunction-call

解决方案


推荐阅读