#define中的符号“ mm ##”在C中意味着什么?

问题描述

C代码中的mm##是什么意思?例如:

#define REGISTER(addr) *((volatile unsigned int *)(addr))

#define abc(reg)  REGISTER(mm##reg)

解决方法

根据gcc docs

“ ##”预处理运算符执行令牌粘贴。展开宏后,每个“ ##”运算符两侧的两个令牌将合并为一个令牌,然后替换宏扩展中的“ ##”和两个原始令牌。通常,两者都将是标识符,或者一个将是标识符,而另一个将是预处理编号。粘贴后,它们将成为更长的标识符。这不是唯一有效的情况。也可以将两个数字(或一个数字和一个名称,例如1.5和e3)连接成一个数字。另外,可以通过令牌粘贴形成+ =等多字符运算符。

在您的情况下,它将创建一个以字符mm为前缀的新标识符。