奇思妙想 · 2024年 4月 27日 0

case语句fallthrough

42 次浏览

大家知道,C/ObjC/C++的switch/case语句中,每个case跟随的语句,如果没有break语句会默认fallthrough. 这产生了一个经常发生bug的地方,不小心遗漏break导致意外的fallthrough.

  • Swift改善了这一点,case语句后面默认隐式带有"break", 如需要fallthrough,需特别写fallthrough语句。它的设计和C语言完全相反,首先默认带break,避免不小心的bug,特别需要fallthrough就指定。
  • Go语言同样以安全优先,默认带break,如需fallthrough需特别写fallthrough.
  • Pascal语言每个case语句默认会结束上一个case语句。

case默认不break有什么优势?

  • 对于C语言而言,case标号其实就是普通的label,汇编语言理解为可以跳转的label. 当有些解析程序对于多个case用同样解析方法,这种设计很方便简洁。