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

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

概述可能重复,但找​​不到相同的. 假设我有以下C代码: int a;printf("Enter number :");scanf("%d",&a); // suppose entered only an integer // ignoring return value of scanf() 我得到一个案例来检查a是零还是非零. if(a) printf("% 可能重复,但找​​不到相同的.

假设我有以下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更快,所以最好在可能的情况下使用它们.

总结

以上是内存溢出为你收集整理的为什么case:总是需要常量表达式,而if()不是?全部内容,希望文章能够帮你解决为什么case:总是需要常量表达式,而if()不是?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1255263.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存