我开始学习嵌入式 C 微 Controller 编程,并想做一些让我的生活更轻松的事情。通常,在处理位掩码时,每个人都会使用以下内容:
char a = (1 << 3) | (1 << 1) | (1 << 5);
我想使用宏来做这样的事情。对于一个掩码,我可以简单地定义这个宏:
#define M(n) (1 << (n))
没什么特别的。问题是我无法提供一个好的解决方案来让我输入:
a = MM( 3, 1, 5 );
或至少 a = MM( 3, 3, 1, 5 );
(其中第一个 3
是参数的数量)
而不是a = M(3) |中号(1) | M(5);
我想出了一个解决方案,该解决方案意味着使用具有多个参数的函数,但我无法使用宏来做到这一点,这确实让我烦恼。
最佳答案
找到答案了。
#define M(a) (1 << (a))
#define M2(a, b) (M(a) | M(b))
#define M3(a, b...) (M(a) | M2(b))
#define M4(a, b...) (M(a) | M3(b))
// can be continued
#define GET_MACRO( _1, _2, _3, _4, NAME, ... ) NAME
#define MM(args...) GET_MACRO( args, M4, M3, M2, M )(args)
这使用 this thread 中的答案
关于c - 如何构建用于低级位屏蔽的 C 宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24662192/