4

我正在查看某人的 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 语句之后。我没想到它会继续测试其他所有案例。

4

1 回答 1

7

这是状态机类型代码的常用技术。但它不会像你想象的那样自动跳跃。该switch语句必须放在while循环中。在这种情况下,我想循环看起来像:

while (!done) {
    done = (variable == 5);
    switch (variable) {
    /*...*/
    }
}

或者,该switch语句可以在函数体内,并且从循环中调用该函数,直到满足完成条件。

于 2013-05-13T21:22:54.413 回答