嵌入式C:如何将MAP宏一次应用于两个参数而不是一个?

问题描述 投票:2回答:2

我想以一种棘手的方式修改或使用这个https://github.com/swansontec/map-macro宏来在我的C源中使用map,如下所示:

MAP(f,1,2,3)
   f(1)
   f(2)
   f(3)

MAP2(f,a,1,2,3)
   f(a,1)
   f(a,2)
   f(a,3)

我该怎么办?

c dictionary macros embedded variadic
2个回答
0
投票

只需使用函数名称宏调用MAP(),宏扩展将插入您的参数:

#define F(x) f(a,x)

然后在你的功能:

MAP(F, 1, 2, 3);

结果是:

f(a, 1); f(a, 2); f(a, 3);

(不支持这种方法,只是提供问题的答案。)


-2
投票

最后,很明显使用C预处理器很糟糕,应该尽可能地避免在现实世界中使用。

我决定使用python和COG自动生成代码,COde Generator:https://nedbatchelder.com/code/cog/index.html#h_the_cog_module

通过将python代码包装在注释中,我能够自我生成我想要的所有内容,无论它有多复杂。

比依赖预处理器更容易,更灵活,更友好2017。

© www.soinside.com 2019 - 2024. All rights reserved.