为什么情况:总是需要常量表达而if()不是?

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)

我检查是否一个案例azeronon-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()运行时吗?

imr*_*eal 9

原因是switch案例可以实现为跳转表(通常使用无条件分支指令).所以它们必须在编译时解决.

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

  • 不是"是",只有"有时可以",AFAIK. (4认同)