【问题标题】:What do two adjacent pound signs mean in a C macro?在 C 宏中,两个相邻的磅符号是什么意思?
【发布时间】:2012-01-30 05:31:56
【问题描述】:

我正在研究一个定义大量常量数组的应用程序。真正让我困惑的是在宏中使用两个相邻的磅符号。例如:

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

这两个磅符号是什么意思?

【问题讨论】:

标签: c c-preprocessor


【解决方案1】:

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

【讨论】:

  • 链接失效了,很遗憾。
  • @Neftas 更像烂人了。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    Als 和 sepp2k 给出正确答案。

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

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

    可以换成更好更短的:

    unsigned int value = 0xbeaf;
    

    【讨论】:

    • 如果它被用作更大宏的一部分,那么在整个地方阅读 r0(p,q,r,s) 而不是 0x##p##q##r##s 会更清晰。
    • @StilesCrisis:不,如果它被用作大型宏的一部分,那么在没有任何宏的情况下重写代码会更干净。
    • C 并不是一门完美的语言——有时宏仍然是最佳选择。如果不了解更多关于 OP 的代码,这很难说。
    猜你喜欢
    • 2015-11-17
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 2010-10-24
    相关资源
    最近更新 更多