加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么case:总是需要常量表达式,而if()不是?

发布时间:2020-12-16 03:23:21 所属栏目:百科 来源:网络整理
导读:可能重复,但找??不到相同的. 假设我有以下C代码: int a;printf("Enter number :");scanf("%d",a); // suppose entered only an integer // ignoring return value of scanf() 我得到一个案例来检查a是零还是非零. if(a) printf("%d is non-zero",a);else pr
可能重复,但找??不到相同的.

假设我有以下C代码:

int a;
printf("Enter number :");
scanf("%d",&a);  // suppose entered only an integer
                // ignoring return value of scanf()

我得到一个案例来检查a是零还是非零.

if(a)
  printf("%d is non-zero",a);
else
  printf("%d is zero",a);

一切都很好使用if-else,我也知道if-else的其他变体来实现这一点.但是问题来自于switch-case,因为它说我们可以在switch-case中实现我们可以在if-else中执行的所有操作.但以下代码失败.

switch(a)
{
 case a:
       printf("%d is non-zero",a);
       break;
 default:
       printf("%d is zero",a);
       break;
}

另外我知道在上面的代码中反转这个例子,如下所示将工作,我将有我的答案.

switch(a)
{
case 0:
    printf("%d is zero",a);
    break;
default :
    printf("%d is non-zero",a);
    break;
}

但问题是,为什么?为什么(a)在案件a:不是有效的情况下? switch-case是一个编译时操作和if()运行时?

解决方法

原因是交换机情况可以实现为跳转表(通常使用无条件分支指令).所以他们必须在编译时解决.

这使得它们比ifs更快,所以最好在可能的情况下使用它们.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读