如何让GCC编译16位Unicode字符串?STM32 USB栈编译遇错
编译libusb_stm32时的预处理器错误与sizeof逻辑疑问
我使用基于GCC的Segger Embedded Studio编译libusb_stm32项目时,遇到如下编译错误:
pasting formed 'u"Open source USB stack for STM32"', an invalid preprocessing token
该错误由以下代码触发:
static const struct usb_string_descriptor manuf_desc_en = USB_STRING_DESC("Open source USB stack for STM32");
其中USB_STRING_DESC宏的定义为:
#define USB_STRING_DESC(s) {.bLength = sizeof(CAT(u,s)),.bDescriptorType = USB_DTYPE_STRING,.wString = {CAT(u,s)}}
CAT宏的定义是#define CAT(x,y) x##y,原本意图是将8位char类型的字符串转换为16位Unicode字符串,但编译器不接受这种写法。我猜测问题出在我的环境配置上,比如是否缺少了某个头文件,或者编译选项没有正确设置?毕竟代码作者应该是能正常编译通过的。
另外我还有个疑问:这里的sizeof()操作逻辑我不太理解。按我的认知,编译时无法直接获取字符串的长度,这里的sizeof应该返回指针的大小才对,为什么会这么写?
内容的提问来源于stack exchange,提问作者Christopher Theriault
相关产品推荐
相关产品推荐

