gpt4 book ai didi

c - 对于不同类型的变量,如何重用变量而不出现错误 C2371(重新定义)?

转载 作者:行者123 更新时间:2023-12-04 05:22:24 25 4
gpt4 key购买 nike

在 VBA 中,我只是为此使用变体类型,但是如何减少这种有点重复的代码以获得更好的 switch case块?

switch(command){
case CMD1:
RESPONSE1 rsp1;
memcpy(&rsp1,pPkt,sizeof(rsp1));
break;
case CMD2:
RESPONSE2 rsp2;
memcpy(&rsp2,pPkt,sizeof(rsp2));
break;
case CMD3:
RESPONSE3 rsp3;
memcpy(&rsp3,pPkt,sizeof(rsp3));
break;
case CMD4:
RESPONSE4 rsp4;
memcpy(&rsp4,pPkt,sizeof(rsp4));
case CMD5:
RESPONSE5 rsp5;
memcpy(&rsp5,pPkt,sizeof(rsp5));
default:
break;
}

我的目标是消除这 5 个响应变量并只使用一个 - 但是,由于 memcpy,我需要 5 种不同的类型。 .

我知道,有类似 cast 的东西,但我认为这更成问题,因为这些 RESPONSE# 是不同大小的结构 - 我不需要为此重新分配内存吗?

编辑:

感谢 mux,我发现在我的代码中已经有一个 union (改编其他人的东西)!
typedef union
{
RESPONSE1 rsp1;
RESPONSE2 rsp2;
RESPONSE3 rsp3;
RESPONSE4 rsp4;
RESPONSE5 rsp5;
}
RESPONSE_UNION;

这就是我现在正在使用的:
RESPONSE_UNION ru;

switch(command){
case CMD1:
memcpy(&ru.rsp1,pPkt,sizeof(ru.rsp1));
break;
case CMD2:
memcpy(&ru.rsp2,pPkt,sizeof(ru.rsp2));
break;
...

真的是一个很大的帮助!

最佳答案

您可以使用 union你可能还想定义一个 enum对于响应类型:

typedef enum { 
RESPONSE_1,
RESPONSE_2,
RESPONSE_3,
RESPONSE_4
} ResponseType;

typedef struct {
ResponseType type;
union {
RESPONSE1 rsp1;
RESPONSE2 rsp2;
RESPONSE3 rsp3;
RESPONSE4 rsp4;
};
} Response;

在您的代码中,您可以这样使用它:
Response r;
switch (command) {
case CMD1:
r.type = RESPONSE_1;
memcpy(&r.rsp1, pPkt, sizeof(r.resp1));
break;
case CMD2:
...
}

关于c - 对于不同类型的变量,如何重用变量而不出现错误 C2371(重新定义)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13569139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com