首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于不同类型的变量,如何在不获得错误C2371 (重新定义)的情况下重用变量?

对于不同类型的变量,如何在不获得错误C2371 (重新定义)的情况下重用变量?
EN

Stack Overflow用户
提问于 2012-11-26 16:36:54
回答 1查看 127关注 0票数 2

在VBA中,我只是使用一个变体类型来实现,但是如何减少这些重复代码以获得更好的switch case块呢?

代码语言:javascript
复制
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,我发现,在我的代码中已经存在这样的联合(修改来自其他人的东西)!

代码语言:javascript
复制
typedef union
{
  RESPONSE1 rsp1;
  RESPONSE2 rsp2;
  RESPONSE3 rsp3;
  RESPONSE4 rsp4;
  RESPONSE5 rsp5;
}
RESPONSE_UNION;

这就是我现在使用的:

代码语言:javascript
复制
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;
...

真是帮了大忙!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-26 16:39:36

您可以使用union,还可以为响应类型定义一个enum

代码语言:javascript
复制
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;

在您的代码中,您可以这样使用它:

代码语言:javascript
复制
Response r;
switch (command) {
    case CMD1:
        r.type = RESPONSE_1;
        memcpy(&r.rsp1, pPkt, sizeof(r.resp1));
        break;
    case CMD2:
    ...
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13569139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档