ANSI C不完美的switch case

原创 2017年01月03日 10:07:27

1、ANSI C规定标准的C编译器至少需要支持一条switch语句中有257个case,这是为了允许switch满足一个8bit字符的所有情况,加上EOF。

2、case是无序的,比如default语句是否放在最后,没有要求。虽然编程中一般是将default放在最后。

switch(n){
		case 1:
			printf("1\n");
			break;
		case 2:
			printf("2\n");
			break;
		case 3:
			printf("3\n");
			break;
		default:
			printf("default\n");
			break;
	}
等同于

switch(n){
                default:
			printf("default\n");
			break;
		case 1:
			printf("1\n");
			break;
		case 2:
			printf("2\n");
			break;
		case 3:
			printf("3\n");
			break;
	}

3、case中不加break,将不会停止,会继续往下执行。fall through实际中我们很少这么应用。绝大部分情况,都是错误的写法。

switch(n){
		case 1:
			printf("1\n");
			//break;
		case 2:
			printf("2\n");
			//break;
		case 3:
			printf("3\n");
			//break;
		default:
			printf("default\n");
			break;
	}

则,n = 1时。输出

1

2

3

default

4、难以发觉的BUG。

switch(n){
		case 1:
			printf("1\n");
			break;
		case 2:
			printf("2\n");
			break;
		case 3:
			printf("3\n");
			break;
		defau1t:
			printf("default\n");
			break;
	}
这段swicth将永远无法走到defau1t分支,原因在于。我们打错了一个字母,将default中的'l',错打成了数字1,这段代码可以顺利通过编译器。

我们知道C中的 STATEMENT:是一个标签的定义,经常和goto语句一起出现。

本文的例子,摘录于《C专家编程》。




版权声明:本文为博主原创文章,未经博主允许不得转载。

switch case 语句要注意!!!

c语言中的switch case 语句相比大家也是非常的清楚的。
  • wretchedme
  • wretchedme
  • 2014年10月01日 17:04
  • 11551

switch语句的用法详解

switch语句的用法详解C语言还提供了另一种用于多分支选择的switch语句, 其一般形式为:switch(表达式) { case常量表达式1: 语句1; case常量表达式2:...
  • zwmwcj
  • zwmwcj
  • 2015年10月27日 13:54
  • 6272

switch……case不能匹配字符串的方法

思路:         将字符串添加到map容器中         然后比较字符串名 获得该字符串所对应的索引值         在Switch中使用这个索引值判断        在std...
  • phenixyf
  • phenixyf
  • 2015年10月23日 10:24
  • 2104

switch语句中default用法详解

当年学C语言switch开关语句的时候,很多人会告诉你它是这么用的: switch(表达式){ case常量表达式1: 语句1; case常量表达式2: 语...
  • sum_TW
  • sum_TW
  • 2017年02月26日 15:39
  • 13579

switch匹配问题

C和C++中的switch匹配case的问题,记住下面2条原则就行了:只有当所有case都不匹配时才会进入default语句 当找到一个匹配(无论是case还是default)后,会进入下面的case...
  • u012501459
  • u012501459
  • 2015年05月31日 13:22
  • 911

如何干掉那又丑又长的switch..case语句

1、前言     在实际的编程中,我们经常会使用到switch..case语句,这通常也是对一长串if..else if语句的优化。对于一些简单的情况(只每个case代码中代码长度不会很长,而且ca...
  • acaiwlj
  • acaiwlj
  • 2015年10月27日 09:41
  • 2857

由一个switch语句理解c语言中getchar函数

调用getchar函数时
  • a429491457
  • a429491457
  • 2014年10月07日 20:35
  • 857

18_switch语句_基本用法_case穿透现象

switch多选择结构 根据表达式值的不同执行许多不同的操作: switch语句: case标签必须是整数(byte,short,char,int)或者枚举,不能是字符串。【注:JDK...
  • qq_21122243
  • qq_21122243
  • 2017年06月03日 16:08
  • 508

【Arduino官方教程第一辑】示例程序 5-5 Switch和Case条件语句2

Switch和Case条件语句2If语句允许你根据条件的真假(真(TRUE)或假(FALSE))进行两个分支操作。当需要进行多个判断时,你就必须使用If嵌套。不过其实还有一种更为简洁的处理多条件判断的...
  • amagamag
  • amagamag
  • 2016年05月31日 12:57
  • 3009

C语言 switch和if..else的区别 以及枚举的作用

C语言 switch和if..else的区别   以及枚举的作用 1.分支结构的两种形式:if/else 和 switch/case 2.两者简单的区别:前者是两个分支的选择,后者是多分支选择...
  • u014536527
  • u014536527
  • 2015年10月03日 16:20
  • 1539
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ANSI C不完美的switch case
举报原因:
原因补充:

(最多只允许输入30个字)