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,恕我直言,你在这个结构中的逻辑需要更复杂一些.