case 的执行过程:
-
计算 case expression,只计算一次,然后按照代码顺序从上向下和 case item 逐个比较
-
比较过程中,如果有 default 分支,则暂时先忽略
-
如果有某个 item 和 expression 匹配,则执行此 item 下的语句
-
如果匹配失败,有 default 分支,则执行该 default 分支
-
如果匹配失败,没有 default 分支,则终止
这个按照顺序比较的过程就是可能导致 priority encoder 的原因