c 语言switch用法举例,C ++ switch语句的用法

int i = 10;

switch( i )

{

case 1:

// do sth1

break;

case 2:

// do sth2

break;

case 3:

// do sth3

break;

default:

// do sth default

break;

}

问题1>当switch语句执行时,我们是直接跳转到正确的case语句还是从上到下进行搜索?

答:直接跳转到正确的案例陈述。

问题2>我们应该在默认语句后使用break语句吗?

答:取决于。 如果default语句是最后一个case语句,则不需要使用break。

我是否在上述问题中得到了答案?

default语句应该始终是最后一种情况。

永远小心。 我有一个案例,我在duff的设备类型构造中首先创建它。

我想补充一点,虽然使用fall through是一种有效且有效的技术,但是其他可能会与你一起处理代码的人可能会把它看成是一个"bug",并且想要一个break语句。忘记放一个 闯入是一个相当常见的错误,所以这是可以理解的。 为了避免这种情况,有必要发表评论说这是故意的。

@Clairvoire:每当我故意失败时,我通常会添加//nobrake评论。

问题1:取决于编译器。 C ++标准不要求设置跳转表。

在许多情况下,特别是对于少量稀疏情况,GCC,MSVC和其他编译器将进行逐条款检查(就好像它是if语句)。举个例子,假设您的案例是1,15和1000000.进行直接跳转在代码方面效率不高。

gcc有选项-fno-jump-tables来强制它构建等效的if-else列表。

问题2:最后一个子句不需要break语句。如果执行应该向下流动,则应该省略它。

对于答案二你是正确的,除非我要在默认语句之后添加一个中断,如果它是最后一个案例或它不是,你不希望它通过。但这只是一个挑剔。

问题1的答案取决于是否启用了优化以及编译器的智能程度。如果优化很低或禁用(或者您的编译器只是旧的和/或不是非常复杂),它将从上到下跳过默认情况(谢谢q0987)。如果启用了优化并且编译器决定执行此操作,它将被优化为跳转表,在这种情况下,它将直接跳转到正确的大小写。

如果禁用优化并假设你所说的是正确的,那么如果我将默认语句放在所有情况之前,代码将无效。 如果我没记错的话,C ++不需要将默认值放在特定位置。

@ q0987哦好点。 我会修改我的答案。

"如果这是最后一个案例,你不希望它落空。但这只是一个挑剔。"......落到哪里? 这是最后一个案例!

@Karl对不起,措辞不好

Question 1> When the switch statement executes, do we jump directly to the right

case statement or do we search from top to bottom?

我不认为标准中有关此实现细节的任何提及。但是,你的答案是正确的。

Question 2> Should we use a break statement after the default statement?

是的,这取决于要求。有时您可能根本不需要它。考虑一下这种情况,你想要为default:案例做些什么,而对于case 1:来说则要做点小事。例如,

switch(i)

{

default: foo();

case 1:  bar();

break;

case 2:  abc();

break;

case 3:  xyz();

break;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值