打破switch语句

use*_*809 1 c scope objective-c break switch-statement

我总是不得不在break开关声明中; 简单地用分号;退出是不安全的?

switch ( (rand() % 2) ) {
    case 0:
    // Do foo;
    break;
    case 1:
    // Do nothing
    ;
    default:
    ;
}
Run Code Online (Sandbox Code Playgroud)

bbu*_*bum 16

考虑Duff的设备(一个将N个字节从内存中的一个点复制到另一个点的功能):

send(to, from, count)
register short *to, *from;
register count;
{
        register n = (count + 7) / 8;
        switch(count % 8) {
        case 0: do {    *to = *from++;
        case 7:         *to = *from++;
        case 6:         *to = *from++;
        case 5:         *to = *from++;
        case 4:         *to = *from++;
        case 3:         *to = *from++;
        case 2:         *to = *from++;
        case 1:         *to = *from++;
                } while(--n > 0);
        }
}
Run Code Online (Sandbox Code Playgroud)

它只能工作 - 而且,是的,它确实有效 - 因为所有情况都会落到下一个,因为没有一个案例使用break;.所以,是的,你必须使用break;退出case,但是下降到下一个case可能是有用的.

尽管如此,正如Duff的设备所简洁地证明的那样,使用break;它会产生一种独特的代码味道,这种气味对你自己来说太棘手了.


Wai*_*ain 12

分号不会退出开关.否则,每个语句(以分号结尾)都将退出交换机.

如果您不添加中断,则将执行下一个案例.在你的情况下,它可能会像default下一个一样工作,它是空的,但通常你的代码会做出意想不到的事情......