无break不需要判断case吗
完全就是扯,即使没有break,执行case3的时候不先要判断3是不是num吗?
2017-08-09
题主这个问题很经典,这其中涉及到编译的问题。事先声明,接下来我的回答都是我的个人理解,肯定会有不准确的表述。
咱们现在看到的switch结构,一旦经过编译器处理后,指令的顺序就大大不一样了,编译器会把所有的case判断转换成汇编指令放到一起,把分别执行的语句也放到一起,加载到内存中就是两块连续的存储空间,一块放判断,一块放动作。两块怎么联系起来?通过给动作空间进行标号,程序执行时,(注意,这里的汇编指令就是判断+跳转),先判断,一旦判断符合,跳转到相应标号的动作区域执行动作,如果判断不符合,接着下一条判断(判断+跳转)。再说说动作区域的执行,要知道,动作区域的执行也是从上往下一条条顺序执行的,所以,如果相应的动作后面不加break,就会顺序执行下一条动作。我们可以理解成break被转换成一条跳转指令放到了动作区域里,只不过break不需要判断跳转,它是直接跳转,跳转的目的地也是动作区域的一个标号,end,跳出。
列几个网址,有时间看看。PS,别钻牛角尖。
http://book.51cto.com/art/201312/421963.htm
http://blog.csdn.net/lixiangminghate/article/details/71171804?utm_source=gold_browser_extension
这个很好,注释很完美。
http://blog.sina.com.cn/s/blog_5526d40f0100orrc.html 这个文章后半段感觉不好,貌似作者自己在弄编译器。
举报