如何让gcc编译16位unicode字符串

yizd12fk  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(302)

所以我试着编译这个项目:https://github.com/dmitrystu/libusb_stm32与使用gcc的Segger Embedded studio。进程因以下错误而阻塞:

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是一个宏CAT(x,y) x##y。它的目的一定是将8位char类型的字符串转换为16位Unicode类型,但编译器不喜欢它。是否有一些#include或编译器设置可能丢失,我必须在这里添加?显然,这段代码的作者希望它能工作,所以我的设置中一定有一些错误。
我也不清楚这里的sizeof()操作是如何工作的。据我所知,没有办法在编译时获得字符串的长度,这样操作就总是返回指针的大小。

ctehm74n

ctehm74n1#

作为对基思问题的回应,gcc版本是4.2.1。在编译器设置中,默认选项是C99标准,当我将其改为C11时,一切都编译得很好。谢谢!

相关问题