在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,我发现,在我的代码中已经存在这样的联合(修改来自其他人的东西)!
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;
...真是帮了大忙!
发布于 2012-11-26 16:39:36
您可以使用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:
...
}https://stackoverflow.com/questions/13569139
复制相似问题