我正在读一些文字C language
。文字说switch{} case
只能接受整数类型。
我只是好奇为什么switch{} case
不接受其他类型,例如浮点数或字符串。这背后有什么原因吗?
多谢。
经典的原因可能是对于整数值的“决策表达式”,可以进行非常好的优化。
基本上,您可以将 case-statement 列表映射到包含地址的表,然后根据值直接跳转。显然,对于浮点数和字符串来说这是行不通的。
在 GCC 中,您可以使用手动执行此操作一些扩展 http://gcc.gnu.org/onlinedocs/gcc-3.4.1/gcc/Labels-as-Values.html像这样:
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;
}
这通常称为“计算转到”,并且应该清楚如何switch
基本上可以编译成非常相似的东西。打开表达式的严格定义会有所帮助,例如使用enum
.
此外,C 在语言级别上并没有太多字符串的概念。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)