switch的问题

player7 2007-04-22
我一直以为switch语句的default 不是必写的,结果今天写程序怎么也执行不了。
void main()   
{   
  int c=10,x=0;
  switch(c){
	case 1:
			x = 3;
	case 2:
			x = 4;
			break;
   }
writefln("ok");   
}   


真是不幸,花了很长时间才找到原因,(因为我的函数是被DLL调用的,所以出了问题就直接退出,没有任何提示),而上面的例子运行就会提示:Error: Switch Default m2(8)

翻了翻文档,似乎不是必写的嘛?编译器版本是1.012
player7 2007-04-22
气死我了,白花了一个小时。。。
oldrev 2007-04-22
楼主,建议你找本C语言的入门书好好看看吧
player7 2007-04-22
查了,C语言确实可以省略, 而D不能(否则抛出SWITCH异常),以前没注意过这个差别.
qiezi 2007-04-22
这个异常有点不舒服,还不如给个编译时错误呢。
qiezi 2007-04-22
这个倒是有个语法上的便利。有时我们可能写的代码就是在default里面抛一个异常,表示不该执行到这个流程里面,现在默认就是这种行为。
DavidL 2007-04-22
呵呵,我也没注意这个差别,然而LZ不觉得抛个异常更加合理么?而且不止于花一个小时吧,呵呵。抛异常的做法防止了意外的写漏default的情形。
player7 2007-04-22
然而在被外部DLL调用时,根本不显示这异常啊,直接退出.
我把所有代码都查了一遍,实在是没想到会在这部分出问题.
oldrev 2007-04-22
我指的是  x = 3; 后面没有 break

不至于犯这种错误吧
 
player7 2007-04-22
抄自一段C++代码,为了演示省略CASE的用法
Global site tag (gtag.js) - Google Analytics