在C宏中,两个相邻的磅符号意味着什么?

我正在看一个定义了大量常量数组的应用程序。 令我困惑的是在宏观中使用彼此相邻的两个磅标志。 例如:

#define r0(p,q,r,s) 0x##p##q##r##s 

那两个磅标志是什么意思?

##提供了一种在宏扩展期间连接实际参数的方法。

##连接符号。 因此,例如,如果p的值是ab ,则0x##p将变为0xab

Als和sepp2k给出了正确的答案。

不过我想补充一点,这个宏似乎完全没必要。

 unsigned int value = r0(b,e,a,f); 

可以用更好更短的代替:

 unsigned int value = 0xbeaf;