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

Embedded C: How to apply the MAP macro to two arguments at a time instead of one?

我想以一种巧妙的方式修改或使用此 https://github.com/swansontec/map-macro 宏,以便在我的 C 源代码中使用地图,如下所示:

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)

我该怎么办?

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

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

然后在你的函数中:

MAP(F, 1, 2, 3);

结果是:

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

(不认可该方法,只是提供问题的答案。)

最后,很明显使用 C 预处理器是不好的,在现实世界中应该尽可能避免。

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

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

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