您的位置:首页 > 编程语言 > C语言/C++

浅谈c中switch的暴力跳转

2015-08-23 20:04 295 查看
今日是二零一伍年八月二十三日,今天在课堂学习了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这样暴力语句时一定要谨慎。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息