你所不知道的switch语句-C语言

C语言中的switch语句通常用在分支条件过多的情况下,它可以替代if 语句,避免代码复杂化并提高执行效率。但是,这个switch语句还有阴暗面,使用这货可以写出非常难懂的代码,以至于需要查看生成的汇编代码来理解代码功能。

你可能看过”怎么写不可维护的代码”:https://github.com/Droogans/unmaintainable-code,呵呵。

首先看一下switch语句的正常用法:

大部分人理解的switch语句就是上面这个样子,用来替代if-else语句。

你可知下面这段代码也是有效的switch语句:

上面代码是什么鬼。这也就是C,其它语言是不支持上面的写法的。大多数编程语言的switch语句都当做if-else语句的替代品。

switch语句的工作原理

C语言的switch语句可以叫做”goto域”,switch决定要执行哪个分支的标签,就跳转到哪个标签开始按顺序执行,如果遇到break,就跳出switch语句。上面的代码可使用goto改写为:

参看:达夫设备

基于达夫设备实现的coroutine机制。

coroutine本身提供了一种机制,让开发者可以控制一个代码片段,让它暂停,然后在下次调用时继续从上次暂停的地方继续运行。

其它奇怪但正确的switch语句

最简单的:

没有条件分枝的switch:

这个都能编译通过:

下面代码片段只限gcc/clang编译器。


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注