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

时间:2012-01-30 05:31:57

标签: c c-preprocessor

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

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

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

3 个答案:

答案 0 :(得分:27)

##在宏扩展期间为 concatenate actual arguments 提供了一种方法。

答案 1 :(得分:9)

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

答案 2 :(得分:5)

Als和sepp2k给出了正确答案。

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

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

可以用更好更短的代替:

unsigned int value = 0xbeaf;