为什么我们不能在switch构造中的case中使用变量?

RAD*_*GIA 1 c compiler-errors

如果我int a=4在切换情况下有一个整数变量如果我写

int b = something;
...
switch(a) 
{ 
  case 4+b: printf("hii"); 
} 
Run Code Online (Sandbox Code Playgroud)

那么为什么这个语句是一个编译时错误,变量不能在case语句中使用为什么编译器不能代替变量来替换值.

所以基本上它创建的问题是语言开发人员没有将它作为正确的语法包含在内.

Bla*_*iev 7

switch控制流语句的最初想法是它应该非常快速地确定适当的情况,同时可能有很多情况.

传统的实现将使用跳转表,使其成为一个O(1)操作.跳转表本质上是一个指针数组,其中每个指针包含每个指针的第一条指令的地址case.跳转到适当case的就像使用switch值索引该数组然后jump对该地址执行指令一样简单.

如果允许包含变量的情况,则编译器必须发出首先计算这些表达式的代码,然后将该switch值与多个其他值进行比较.如果是这种情况,那么switch声明只是一个语法糖化版本的ifelse if.

switch语句通常是实现有限状态机(如解析器)的任何算法的核心,因此这是将其包含在语言中的一个很好的理由.大多数现代编译器可能会为一个链生成相同的机器代码,if并且else if只针对常量测试变量,但在20世纪70年代早期,当C被构思时,情况并非如此.此外,switch为您提供了在后一种安排中无法实现的能力.