yas*_*ash 3 c label compiler-errors switch-statement logical-and
int main(){
char c='a';
switch(c){
case 'a' && 1: printf("Hello");
case 'b' && 1: printf("hey");
break;
default : printf("Goodbye");
}
}
Run Code Online (Sandbox Code Playgroud)
当我编译此代码时,结果是“编译错误”,这(根据我的说法)是因为在内部两个表达式都是 true,因此对于我们为“c”采用的任何字符,两种情况下的常量表达式都将始终为 true 。
但现在出现的疑问是我无法理解,内部如何解释代码以及编译器实际上如何解释该代码?
表达式'a' && 1和'b' && 1都有值1。
因此,您的代码与此严格等效:
...
switch(c){
case 1: printf("Hello");
case 1: printf("hey");
break;
default : printf("Goodbye");
}
}
...
Run Code Online (Sandbox Code Playgroud)
因此会出现错误消息,因为两个或多个案例标签不能具有相同的值。C语言不允许这样做。