You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 03:25:21