objective-c - 跳出 switch 语句

标签 objective-c c scope switch-statement break

我是否总是需要从 switch 语句中break?简单地用分号 ; 退出是不安全的吗?

switch ( (rand() % 2) ) {
    case 0:
    // Do foo;
    break;
    case 1:
    // Do nothing
    ;
    default:
    ;
}

最佳答案

考虑 Duff's Device (将 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);
        }
}

它只管用——是的,它真的管用——因为所有的案例都落到了下一个,因为没有一个案例使用break;。所以,是的,您必须使用break; 退出case,但是落入下一个case 可以可能有用。

不过,正如 Duff 的设备简洁地展示的那样,不是使用 break; 失败有一种明显的代码味道,即对你自己来说太棘手.

关于objective-c - 跳出 switch 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17279168/

相关文章:

ios - 按 NULL NSDates 对 NSFetchedResultsController 进行排序

c++ - 今天的主流编程语言主要使用动态还是静态(词法)作用域?

javascript - 是否建议在 .each() 中放置一个函数?

java - 什么是无作用域 bean 以及何时使用它?

ios - 在两个 Action 之间随机选择并每隔一定时间重复一次

iOS 应用被 Apple 拒绝,即使添加了 "Restore Purchase"功能?

ios - 如何从 parse.com 获取推送通知历史记录? (iOS)

C:什么时候考虑使用变量或值?

c - 当我们在 C 的调用函数中不使用 return 语句时会发生什么?

html - POST HTTP 响应