Omk*_*ant 9 c if-statement switch-statement
可能重复,但无法找到相同的.
假设我有以下C代码:
int a;
printf("Enter number :");
scanf("%d",&a); // suppose entered only an integer
// ignoring return value of scanf()
Run Code Online (Sandbox Code Playgroud)
我检查是否一个案例a是zero或non-zero.
if(a)
printf("%d is non-zero",a);
else
printf("%d is zero",a);
Run Code Online (Sandbox Code Playgroud)
一切都很好用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;
}
Run Code Online (Sandbox Code Playgroud)
另外我知道在上面的代码中反转这种情况,如下所示将起作用,我会得到答案.
switch(a)
{
case 0:
printf("%d is zero",a);
break;
default :
printf("%d is non-zero",a);
break;
}
Run Code Online (Sandbox Code Playgroud)
但问题是,为什么?为什么if(a)有效而case a:不是?是switch-case编译时操作和if()运行时吗?
原因是switch案例可以实现为跳转表(通常使用无条件分支指令).所以它们必须在编译时解决.
这使得它们比ifs 更快,所以最好在可能的情况下使用它们.