在C语言中,我们可以使用预处理器的字符串化操作符#来将宏参数转换为字符串。这个操作符只能在宏定义中使用。所以,你可以这样定义STR(x):
#define STR(x) #x
然后,你可以使用STR(x)来将USART_RATE转换为字符串:
#define USART_RATE 115200
#define STR(x) #x
printf("usart rate = %s\n", STR(USART_RATE));
但是,这样做会直接将USART_RATE
转换为字符串,而不是将其值115200
转换为字符串。为了解决这个问题,我们需要使用两层宏定义:
#define USART_RATE 115200
#define _STR(x) #x
#define STR(x) _STR(x)
printf("usart rate = %s\n", STR(USART_RATE));
在这个例子中,STR(x)首先将x(即USART_RATE)扩展为其值115200,然后_STR(x)将这个值转换为字符串。所以,printf会打印出usart rate = 115200\n。