可能是重复的,但找不到相同的。
假设我有以下 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;
}
但问题是,为什么?为什么 if(a)
有效而 case a:
无效? switch-case
是编译时操作和 if()
运行时操作吗?
最佳答案
原因是 switch
case 可以实现为跳转表(通常使用无条件分支指令)。所以它们必须在编译时解决。
这使得它们比 if
更快,因此最好尽可能使用它们。
关于c - 为什么案例 : always requires constant expression while if() doesn't?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13995670/