C预处理器宏扩展

C pre-processor macro expansion

我想做的是一个简单的宏观扩展

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

现在我希望扩展到清除扩展到iconmap[4]&;=~16的数字(4,16)但是,它不…如果我把一个函数的数字弄清楚:

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

然后它就可以工作了,所以将r1扩展到这两个参数并不是问题…在执行宏函数展开之前,是否有任何方法强制它展开r1?


可以使用助手宏。另请参见双线问题

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