在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;
}
也许这不是一个很好的例子,但我无法理解它是如何工作的,是什么促使Linus将默认部分放在switch语句的前面。
答案 0 :(得分:11)
代码中case
块中switch
个标签的顺序与执行哪个标签无关。如果default
没有匹配,则会执行case
标签,或者从case
上方default
开始执行。在代码库中首先使用它不会改变它。
让case
成为第一位的一个好处是,default
以上default
不可能意外地或故意地落到case
。这意味着当且仅当值与switch
块中的default
语句不匹配时,才会运行goto
。
要非常迂腐,你仍然可以使用明确的{{1}}来点击{{1}}标签。这是非常罕见的。