最近我一直在做stm32,处理一些msg问题。我试图构造一个队列来存储来自usart和can的消息,然后我想到我应该为它们构建一个泛型类型。我尝试使用一个宏来定义不同类型的队列,但错误产生。
下面是我的代码,我希望使用“USART_QUEUE2”作为类型:
#define DEF_QUEUE(ITEM_TYPE,NAME) \
typedef struct #NAME \
{\
(ITEM_TYPE)* buffer; \
void (*Push)((ITEM_TYPE)* src, struct #NAME * queue);\
}#NAME;\
DEF_QUEUE(u8,USART_QUEUE2)
这里的错误是"message": "expected either a definition or a tag name" "message": "expected identifier or '(' before string constant"
我不知道该怎么补救。有人能帮我拿一下这个吗?
我试着问ChatGPT,但显然它不能正确处理宏问题。我已经把相关的问题卷进去了,但没有找到精确的解决方案。
1条答案
按热度按时间a8jjtwal1#
1.你不能在宏值周围使用通常的
()
,所以这是额外的脆弱。1.不要在这里使用'#',因为这将创建字符串,但您需要标识符。
1.(不固定)我不喜欢在类型旁边有'*'而不是变量的风格,因为它不能泛化(
int* a, b
不是int *a, *b
)。下面是相应的输出: