使用宏生成Variadic函数调用

时间:2018-06-04 12:33:43

标签: c macros c-preprocessor function-call

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

我找到了一个标题here

我已经知道maccro的名称在给定的标题中不相同, 我改变它以使帖子更明确

感谢@HolyBlackCat,他给了我一个working example

0 个答案:

没有答案