Net*_*ire 9 c switch-statement
在linux/kernel/signal.c中找到了这个
switch (_NSIG_WORDS) {
default:
for (i = 1; i < _NSIG_WORDS; ++i) {
x = *++s &~ *++m;
if (!x)
continue;
sig = ffz(~x) + i*_NSIG_BPW + 1;
break;
}
break;
case 2:
x = s[1] &~ m[1];
if (!x)
break;
sig = ffz(~x) + _NSIG_BPW + 1;
break;
case 1:
/* Nothing to do */
break;
}
Run Code Online (Sandbox Code Playgroud)
也许这不是一个很好的例子,但我无法理解它是如何工作的,是什么促使Linus将默认部分放在switch语句的前面.
Jar*_*Par 12
代码中块case内的标签顺序switch与执行哪一个无关.该default如果没有标签执行case匹配,或者从漏网case上面.在代码库中首先使用它不会改变它.
拥有第一个优势的一个好处default是,不可能case无意中或有意地落到它上面default.default当且仅当值与块中的case语句不匹配时,此方法才会运行switch.
为了变得非常迂腐,你仍然可以default用明确的方式击中标签goto.这是非常罕见的.