所以我试着编译这个项目: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()
操作是如何工作的。据我所知,没有办法在编译时获得字符串的长度,这样操作就总是返回指针的大小。
1条答案
按热度按时间ctehm74n1#
作为对基思问题的回应,gcc版本是4.2.1。在编译器设置中,默认选项是C99标准,当我将其改为C11时,一切都编译得很好。谢谢!