【问题标题】:What is '##' in C? [duplicate]C中的'##'是什么? [复制]
【发布时间】:2016-02-08 21:42:23
【问题描述】:

我在 Keil 中使用 USART,我看到了这个;

#define USART_DRV_NUM 6

#define USART_BAUDRATE 9600

#define _USART_Driver_(n) Driver_USART##n
#define USART_Driver_(n) _USART_Driver_(n)

extern ARM_DRIVER_USART USART_Driver_(USART_DRV_NUM);
#define ptrUSART (&USART_Driver_(USART_DRV_NUM))

事情是这样的;

#define _USART_Driver_(n) Driver_USART##n

我在 Internet 上找不到任何示例。有人知道这件事吗?

【问题讨论】:

    标签: c embedded keil


    【解决方案1】:

    它叫做Token Pasting Operator。它会生成一个标识符,例如

    #define _USART_Driver_(n) Driver_USART##n
    
    int _USART_Driver_(_EXAMPLE);
    

    被翻译成

    int Driver_USART_EXAMPLE;
    

    请注意,n 不是变量。它在预处理阶段的实际编译之前被逐字替换。

    【讨论】:

    • 感谢您的回答。我可以循环使用它吗?例如; while(i--){ husart.instance = _USART_Driver_(i) }
    • 不,你不能。它在编译时被替换,n 不能是变量。
    • 有什么可以循环使用的吗?
    • 是一个数组。你想做什么?
    • 我不想使用数组。这个令牌粘贴操作符看起来很干净。数组比这个宏占用更多的内存。
    猜你喜欢
    • 2011-08-06
    • 2011-06-11
    • 2012-03-17
    • 1970-01-01
    • 2011-10-24
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    相关资源
    最近更新 更多