浅谈c中switch的暴力跳转

今日是二零一伍年八月二十三日,今天在课堂学习了misra_c,那是一种用于汽车制造业的c语言的标准。相对于用于编程的要求,它其实更加的严格,比如什么不能使用原有的变量名,笔者在这里也不做详细讲解,不过可以为大家推荐一篇文章:http://blog.csdn.net/pony_maggie/article/details/5270335

讲讲今天的主题,我们的switch语句。在编程时发现switch语句的一个特点,就是暴力搜索比如这样一个程序:

// switch.cpp
#include <stdio.h>
#include <stdlib.h>

int main (){
	int x = 1 , flag = 1 ;
	switch(x){
		case 1 :
			if(flag){
					printf("case 1 \n") ;
					case 2 :
						printf("case2\n") ;
			}
			break ;
			default :
				printf("default\n");
				break ;
	}
	return ;
}
现在我得到的结果是:
case 1
case 2

switch语句会进行到break语句的那一刻,所以case 2 也被打印了。此时我们再尝试转换一下x与flag的值,把x赋值为2,而flag赋值为0,然后再运行。这个时候结果只会是case 2。想想有些奇怪,难道放在if scope里面的case 2 :被访问到了?

这样,我们就只能认为switch语句是直接暴力地在swith里搜索case,这个有点像goto,不论你的作用域在什么地方,直接暴力搜索,暴力跳转。所以后,我们在使用switch和goto这样暴力语句时一定要谨慎。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章