如何软件分开开关盒内的盒子

CIs*_*ies 2 c switch-statement

我有一个开关案例有4个案例具有相同的通用代码,但我需要为它们不同地初始化变量:

 int a,b,c;
 switch(type)
 {
   case A:
   case B:
   case C: 
   case D:
     foo(a,b,c);
 }
Run Code Online (Sandbox Code Playgroud)

我目前所拥有的是一些a = type == A ? 1 : 2;复杂的变量:

if(type == A)
  b = 1;
else if(type == B)
  b = 5;
else
  b = 2;
Run Code Online (Sandbox Code Playgroud)

这有效,但在我看来看起来很难看,而且不是很流利.我可以完全划分案例,但我想在我的代码中避免复制粘贴.

我希望做的是:

 int a,b,c;
 switch(type)
 {
   case A:
     a = 1;
     b = 1;
   case B:
     a = 2;
     b = 5;
   case C: 
   case D:
     a = 1;
     b = 2;
     foo(a,b,c);
 }
Run Code Online (Sandbox Code Playgroud)

但这显然不会起作用,因为case D即使案例是A或B,也会发生变量赋值.有没有办法以一种整洁(和工作:)的方式实现这一点?

编辑:在switch实际上是过滤等情况,所以我想在foo()这些特定的4-里面的情况

小智 5

根据您的代码,您可以执行以下操作:

int a,b,c;
switch(type)
{
   case A:
     a = 1;
     b = 1;
     goto call_foo;
   case B:
     a = 2;
     b = 5;
     goto call_foo;
   case C: 
   case D:
     a = 1;
     b = 2;
   call_foo:
     foo(a,b,c);
     break;

   // [...] more cases
}
Run Code Online (Sandbox Code Playgroud)

为了证明这种使用goto,恕我直言,你在这个结构中的逻辑需要更复杂一些.