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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌入式C:如何将MAP宏一次应用于两个参数而不是一个?相关的知识,希望对你有一定的参考价值。

我想以一种棘手的方式修改或使用这个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)

我该怎么办?

答案

只需使用函数名称宏调用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 Generator:https://nedbatchelder.com/code/cog/index.html#h_the_cog_module

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

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

以上是关于嵌入式C:如何将MAP宏一次应用于两个参数而不是一个?的主要内容,如果未能解决你的问题,请参考以下文章

stm32内存到底是如何分配的,基于.map文件分析

如何一次将样式应用于多个类?

是否有任何理由使用 C 而不是 C++ 进行嵌入式开发? [关闭]

在 Gmail 嵌入式浏览器中打开电子邮件的应用程序链接,而不是启动我的应用程序

C#应用程序中资源和嵌入式资源之间的区别是什么?

如何仅将悬停应用于 X 而不是圆圈