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的用法
|