问题描述
C代码中的mm##
是什么意思?例如:
#define REGISTER(addr) *((volatile unsigned int *)(addr))
#define abc(reg) REGISTER(mm##reg)
解决方法
根据gcc docs:
“ ##”预处理运算符执行令牌粘贴。展开宏后,每个“ ##”运算符两侧的两个令牌将合并为一个令牌,然后替换宏扩展中的“ ##”和两个原始令牌。通常,两者都将是标识符,或者一个将是标识符,而另一个将是预处理编号。粘贴后,它们将成为更长的标识符。这不是唯一有效的情况。也可以将两个数字(或一个数字和一个名称,例如1.5和e3)连接成一个数字。另外,可以通过令牌粘贴形成+ =等多字符运算符。
在您的情况下,它将创建一个以字符mm
为前缀的新标识符。