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

sj7*_*755 25 c c-preprocessor

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

#define r0(p,q,r,s) 0x##p##q##r##s
Run Code Online (Sandbox Code Playgroud)

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

Alo*_*ave 27

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

  • 不幸的是,链接已经死了. (8认同)

sep*_*p2k 10

##连接符号.因此,例如,如果价值p就是ab,0x##p将成为0xab.


noi*_*isy 5

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

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

unsigned int value = r0(b,e,a,f);
Run Code Online (Sandbox Code Playgroud)

可以用更好更短的代替:

unsigned int value = 0xbeaf;
Run Code Online (Sandbox Code Playgroud)

  • C不是一种完美的语言 - 有时候宏观仍然是最好的选择.在不了解OP的代码的情况下,很难说. (7认同)
  • 如果它被用作一个更大的宏的一部分,那么在整个地方读取`r0(p,q,r,s)`而不是'0x ## p ## q ## r ## s`会更清晰. (2认同)