0
这是工作,但它还挺重足的解决方案是否可以强制c中宏的评估?
#define COUNT_BITS_4b(Val) \
((Val) & 0x1) + (((Val) >> 1) & 0x1) + (((Val) >> 2) & 0x1) + (((Val) >> 3) & 0x1)
#define COUNT_BITS_8b(Val) \
(COUNT_BITS_4b(Val) + COUNT_BITS_4b(Val >> 4))
#define COUNT_BITS_16b(Val) \
(COUNT_BITS_8b(Val) + COUNT_BITS_8b(Val >> 8))
#define COUNT_BITS_32b(Val) \
(COUNT_BITS_16b(Val) + COUNT_BITS_16b(Val >> 16))
#define COUNT_BITS_32b(Val) \
(COUNT_BITS_16b(Val) + COUNT_BITS_16b((Val >> 31) >> 1))
....
我想摆脱这个部分,(喜欢的东西取代它这个#define ULONG_BIT
的eval((COUNT_BITS(ULONG_MAX))
)
#if COUNT_BITS_128b(ULONG_MAX) == 32
#define ULONG_BIT 32
#elif COUNT_BITS_128b(ULONG_MAX) == 33
#define ULONG_BIT 33
#elif COUNT_BITS_128b(ULONG_MAX) == 34
#define ULONG_BIT 34
....
#elif COUNT_BITS_128b(ULONG_MAX) == 128
#define ULONG_BIT 128
#endif
Thx for any answer。
我不确定你在问什么。宏根本没有被“评估”。预处理器只执行文本替换。 – 2012-03-09 22:33:55
'#define ULONG_BIT COUNT_BITS_128b(ULONG_MAX)'是否够用?它是一个(非常复杂但仍然)*常量表达式*,任何优化编译器都会转换为一个简单常量。 – 2012-03-09 22:34:23
@Basile Starynkevitch当我在整个应用程序中使用定义为COUNT_BITS_128b(ULONG_MAX)的ULONG_BIT时,我会不会触及任何宏观大小限制或什么? – Neko 2012-03-09 22:55:15