从 Switch 内退出循环的替代方法
在某些情况下,可能需要从内部终止封闭循环switch 语句。虽然使用标志是一种常见的方法,但 C 提供了一种替代解决方案:使用 goto 语句。
困境:
考虑以下代码片段:
<code class="cpp">while(true) { switch(msg->state) { case MSGTYPE: // ... break; // ... more stuff ... case DONE: // **HERE, I want to break out of the loop itself** } }</code>
目标是当 msg->state 等于 DONE 时立即退出循环。
使用 goto:
C 允许使用goto 语句显式跳转到代码中的特定位置。可以利用它来实现所需的行为:
<code class="cpp">while ( ... ) { switch( ... ) { case ...: goto exit_loop; // Jump to this location when msg->state is DONE } } exit_loop: ; // Label for jump target</code>
在此修改后的代码中,当 msg->state 等于 DONE 时,goto 语句将执行流定向到 exit_loop 标签。因此,这会退出 switch 和封闭循环。
注意: 使用标签 (:) 来标识 goto 语句的目标非常重要。不加区别地使用 goto 可能会导致意大利面条式代码和可维护性问题。
以上是如何从 C 中的 Switch 语句中退出循环:使用 `goto` 或标志?的详细内容。更多信息请关注PHP中文网其他相关文章!