【发布时间】:2013-01-09 14:38:06
【问题描述】:
(抱歉英语不好。)
我需要宏 MASK 这样:
-
MASK(a)扩展为(1<<(a)) -
MASK(a,b)扩展为(1<<(a) | 1<<(b)) -
MASK(a,b,c)扩展为(1<<(a) | 1<<(b) | 1<<(c)) - 等
是否可以在 C 预处理器中定义这样的宏?也许可以帮助一些 GCC 扩展?或者也许可以用单个参数实现MASK(x),使得MASK((a,b)) 扩展为(1<<(a) | 1<<(b)),等等。
已添加。我对将MASK 实现为函数不感兴趣。
【问题讨论】:
-
您是否要求宏完全以这种方式扩展(换句话说,它会生成一个常量),或者如果扩展为函数调用是否可以?后者可以使用 C99 可变参数宏来完成。
-
@Chris:我知道我可以使用
...将MASK实现为内联函数。此外,我认为像 GCC 这样的优秀编译器会优化调用,因为它会明确写成(1<<(a))|...。所以,我只对 preprocessor 感兴趣。
标签: gcc c-preprocessor