我正在尝试为PIC微控制器开发通用UART模块。我要做的是定义正在使用的UART,然后让预处理器自动将其替换为其他宏(寄存器名称)。
类似的东西:
#define UART 5
#define UART_RXREG U ## UART ## RXREG
这不起作用,因为它扩展为UUARTRXREG
而不是U5RXREG
。
有没有办法做到这一点,还是根本不可能?
请注意,我不是在寻找简单的字符串连接。我需要先扩展UART宏。
答案 0 :(得分:10)
您需要一个宏间接级别,以便可以扩展连接的标记:
#define CONCAT3_(a,b,c) a##b##c
#define CONCAT3(a,b,c) CONCAT3_(a,b,c)
#define UART 5
#define UART_RXREG CONCAT3(U,UART,RXREG)
答案 1 :(得分:1)
不,这是不可能的。所有连接运算符都将两个标记粘贴在一起。就好像你自己写的那样,哪种方式打败了整个点。如果你有一个参数,它会更有用:
#define UART 5
#define _UART_RXREG(x) U ## x ## RXREG
#define UART_REXREG _UART_RXREG(UART)
此处x
已替换为UART
,但不会进行宏展开,期间。
我想我应该问,你到底想做什么?