关于C中的switch {}案例?

ipk*_*iss 11 c switch-statement

我正在阅读一些文字C language.文字说switch{} case只能接受整数类型.

我只是好奇为什么switch{} case不接受其他类型,如浮点数或字符串.这背后有什么理由吗?

非常感谢.

unw*_*ind 18

经典的原因可能是对于整数值"决策表达式",可以进行非常好的优化.

基本上,您可以将case语句列表映射到包含地址的表,然后根据值直接跳转.显然,对于浮点数和字符串不起作用.

在GCC中,你可以手动使用一些扩展,如下所示:

const char * digit_name(int d)
{
  const void * handlers[] = { &&zero, &&one, &&two, &&three, &&four,
                              &&five, &&six, &&seven, &&eight, &&nine };
  goto *handlers[d]; /* Assumes d is in range 0..9. */

zero:  return "zero";
one:   return "one";
two:   return "two";
three: return "three";
four:  return "four";
five:  return "five";
six:   return "six";
seven: return "seven";
eight: return "eight";
nine:  return "nine";
 return NULL;
}
Run Code Online (Sandbox Code Playgroud)

这通常被称为"计算goto",并且应该清楚如何switch基本上可以编译成非常相似的东西.开启表达式的严格定义有助于,例如使用enum.

此外,C在语言层面上并没有太多的字符串概念.