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专家编程》。




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

相关文章推荐

使用C模拟ATM练习switch..case用法

这个实例很简单,看一下就能明白,至于我已经对C比较熟悉了,为什么还要从这么简单的例子入手,这个需要再详细的说明一下。由于之前学习C的时候,就是急功近利,没有仔细的去品味C中,特别是指针中的一些乐趣,所...

关于switch...case...语句 (Compiler Error C2360)

大多数书上的例子都是一些一些算数表达式,然后case里面接的也就是一句printf或者cout,给人的感觉很弱智。后来才发现能够接多条语句。而且根据一些说明,是不用加括号的。也就是说一个case后面的...

浅析C/C++中的switch/case陷阱

先看下面一段代码: 文件main.cpp #include using namespace std; int main(int argc, char *argv[]) { int a =0;...

浅析C/C++中的switch/case陷阱

浅析C/C++中的switch/case陷阱

求1+2+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A? B:C)

题目:求1+2+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A? B:C) 这道题确实有点偏,网上大部分人给出...

switch……case练习

switch case 语句要注意!!!

c语言中的switch case 语句相比大家也是非常的清楚的。

switch case与if else执行效率分析

结论:switch...case的效率会比if...else要高一些 一、 if...else语句 对if...else函数反汇编后,能看见这个函数所采用的方法是按顺序去比较(jne表示“当不...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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