C预处理器宏扩展

时间:2011-12-21 09:57:31

标签: c macros c-preprocessor

我正在尝试(我想到的)是一个简单的宏扩展

#define CLEAR_DIGIT(a,b)    iconMap[a] &= ~(b)
#define R1 4, 16
CLEAR_DIGIT(R1);

现在我希望扩展到CLEAR_DIGIT(4,16),扩展到iconMap [4]& = ~16 但是,它没有...如果我使CLEAR_DIGIT成为一个函数:

void ClearDigit(unsigned char a, unsigned char b)
{
    iconMap[a] &= ~b;
}
#define R1 4, 16
ClearDigit(R1);

然后它工作正常,因此R1扩展到两个参数不是问题...在进行宏函数扩展之前有没有办法强制它扩展R1?

1 个答案:

答案 0 :(得分:11)

您可以使用辅助宏。另请参阅double-stringize problem

#define CLEAR_DIGIT_HELPER(a,b) iconMap[a] &= ~(b)
#define CLEAR_DIGIT(x) CLEAR_DIGIT_HELPER(x)
#define R1 4, 16
CLEAR_DIGIT(R1);