淺談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這樣暴力語句時一定要謹慎。

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