我正在查看某人的C代码,并发现了一些我甚至不知道可能的东西。在某些情况下,switch变量被修改,意图在中断后执行另一个案例。
开关位于中断处理程序中,因此将重复调用。
switch (variable)
{
case 1:
some_code();
variable = 3;
break;
case 2:
more_code();
variable = 5;
break;
case 3:
more_code();
variable = 5;
break;
case 4:
my_code();
break;
case 5:
final_code();
break;
}
代码似乎正如作者所希望的那样工作。
这是C中的保证行为吗?我总是假设break语句会导致执行在switch语句之后直接跳转到。我不希望它继续测试所有其他情况。
答案 0 :(得分:7)
这是状态机类型代码的常用技术。但它不像你想象的那样自动跳跃。 switch
语句必须放在while
循环中。在这种情况下,我想环路看起来像:
while (!done) {
done = (variable == 5);
switch (variable) {
/*...*/
}
}
或者,switch
语句可以在函数体内,并且从循环中调用该函数,直到满足完成条件。