c - 为什么案例 : always requires constant expression while if() doesn't?

标签 c if-statement switch-statement

可能是重复的,但找不到相同的。

假设我有以下 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/

相关文章:

java - 在 if 中返回值的优雅方式

java - !flag在java中有两种含义?

go - 开关盒不同类型与去

javascript - es6 中 case 后的 switch 语句中的大括号有什么作用?

javascript - switch div 函数中 JavaScript 的时间延迟

c - 僵尸进程在其父进程死亡后去了哪里?

c - 如何在 OpenMP LLVM 中使用运行时跟踪?

c - gettimeofday 可能无法在 C 中获得正确的时间

MySQL 使用 IF 语句进行查询

c - 将 const char * 传递给 C 函数