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

嵌入式C:如何将MAP宏一次应用于两个参数而不是一个?,c,dictionary,macros,embedded,variadic,C,Dictionary,Macros,Embedded,Variadic,我想以一种巧妙的方式修改或使用此宏,以便在我的C源代码中使用map,如下所示: MAP(f,1,2,3) f(1) f(2) f(3) 进入 我该怎么做?只需使用宏作为函数名调用MAP(),宏展开将插入参数: #define F(x) f(a,x) 然后在您的函数中: MAP(F, 1, 2, 3); 结果是: f(a, 1); f(a, 2); f(a, 3); (不支持该方法,只提供问题的答案。)只需使用函数名宏调用MAP(),其中宏展开插入参数: #define

我想以一种巧妙的方式修改或使用此宏,以便在我的C源代码中使用map,如下所示:

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

我该怎么做?

只需使用宏作为函数名调用
MAP()
,宏展开将插入参数:

#define F(x) f(a,x)
然后在您的函数中:

MAP(F, 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自动生成代码,COdeG生成器:

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


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

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

我决定使用python和COG自动生成代码,COdeG生成器:

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


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

请不要使用该宏,使用宏进行元编程是可怕的编程实践。在循环中使用函数指针。说真的。嗨,伦丁,谢谢你的来信。我想用带有可变参数列表的X宏“生成”一些代码。我使用它们不仅仅是为了“循环”:)请不要使用那个宏,用宏进行元编程是可怕的编程实践。在循环中使用函数指针。说真的。嗨,伦丁,谢谢你的来信。我想用带有可变参数列表的X宏“生成”一些代码。我使用它们不仅仅是为了“循环”:)不幸的是,我不能使用此解决方案,因为a应该是另一个宏参数,并且事先不知道。不幸的是,我不能使用此解决方案,因为a应该是另一个宏参数,并且事先不知道。