在C中是否有任何方法可以通过不同的案例标签,每个标签执行特定操作,有些是常见操作而不重写常用操作? 我的意思是代替:
switch(input)
{
case A:
//do nothing
break;
case B:
data = 0x02;
output = data;
break;
case C:
data = 0x04;
output = data;
break;
case D:
data = 0x08;
output = data;
break;
default:
//do nothing
break;
}
使用类似下面的内容,但B,C和D输入的输出不会停留在0x08:
switch(input)
{
case A:
//do nothing
break;
case B:
data = 0x02; //specific operation for B
case C:
data = 0x04; //specific operation for C
case D:
data = 0x08; //specific operation for D
output = data; //common operation for all B,C,D labels
default:
//do nothing
break;
}
如果输入是B,C或D,我需要输出随后分配给0x02,0x04或0x08。可能吗? 谢谢!
答案 0 :(得分:4)
没有明显需要重新安排原始代码,但肯定有可能:
bool write_output = true;
switch(input)
{
case B: data = 0x02; break;
case C: data = 0x04; break;
case D: data = 0x08; break;
case A:
default:
write_output = false;
break;
}
if(write_output)
{
output = data;
}
答案 1 :(得分:1)
另一种方式,更清楚地表明某些案例的行为与其他案件不同:
switch(input) {
case A:
//do nothing
break;
default:
switch (input) {
case B: data = 0x02; break;
case C: data = 0x04; break;
case D: data = 0x08; break;
}
output = data;
}
答案 2 :(得分:0)
switch-case就像一场堕落。在第一次case
匹配后,将执行所有子请求case
语句,直到遇到break
语句。
假设input == 'C'
,在这种情况下,首先data
将设置为0x04
,然后在没有break语句的情况下,数据将被重新分配给0x08
{ {1}}(通过所有案例陈述)。
基本上,对于输入D
,B
和C
数据将设置为D
。对于您需要0x08
B
和C
情况,这是不正确的
我希望根据你原来的情况,这不是你想要的。