#include <stdio.h>
int main(int argc, char *argv[]){
char a = 'c';
switch('c'){
case a:
printf("hi\n");
}
return 0;
}
上面的代码因为错误无法编译:
case label does not reduce to an integer constant
为什么这不被允许?
#include <stdio.h>
int main(int argc, char *argv[]){
char a = 'c';
switch('c'){
case a:
printf("hi\n");
}
return 0;
}
case label does not reduce to an integer constant
想象一下,如果你拥有以下内容:
int a = 1, b = 1, c = 1;
switch (a)
{
case b: return 1;
case c: return 2;
}
它会返回什么?
案例标签需要是常量,这样编译器才能证明没有歧义。
case
使用变量甚至不会带来性能问题),所以我想了解设计原则。 - Je Rogswitch
语句的思想是编译器只在运行时检查switch
表达式,并通过此推断要跳转的位置。如果case
标签可以是非常量表达式,则必须评估所有这些case
表达式以查看是否有一个匹配。因此,它不仅需要评估一个表达式,还需要评估n
个表达式,其中n
是该switch
中case
标签的数量。整个switch
的思想与您的方法相反。将变化的表达式a
放入switch
本身中,并将常量(例如'c'
)放入case
中。
switch
语句中使用常量 - 参见http://www.cprogramming.com/tutorial/c/lesson5.html,第二个例子。 - Jonathon