c - 使用宏生成可变参数函数调用
问题描述
我正在尝试使用#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,他给了我一个工作示例。
解决方案
推荐阅读
- linux-device-driver - 访问 ARM 外设寄存器:non-linefetch (0x1008) 时的外部中止
- java - 如何在 Appium 的 AndroidUIAutomator 脚本中添加等待
- swiftui - 显示另一个 swiftUI 视图时如何停止相机工作?
- java - 使用特定列出的单词在 Java 中解析 cron 表达式的问题
- vba - 使用 VBA 在网页上单击按钮
- javascript - 错误:元素类型无效:应为字符串
- python - Cython,setuptools extra_link_args ipo:警告 #11016:警告未知选项 --start-group
- spring-boot - TopicName 类中没有“of”方法
- python - 带有代码和日期索引的两个数据帧之间的元素划分
- java - 用于以编程方式关联或启用 Jira 项目中的子组件的 REST API