答案是不能
#include<stdio.h>//测试case后面能否使用&&、||
int main()
{
int a = 0;
scanf("%d", &a);
switch(a)
{
case 1 && 2:
printf("hehe");
break;
case 3 || 4:
printf("haha");
break;
}
return 0;
}
在我测试case后面的整形常量表达式中能否使用&&、||,能使用,但出现问题,代码中第二个 case 后面用 || 的话会提示错误 case 的标签已出现在此开关.
只用一个数字的话就不会报错
#include<stdio.h>//测试case后面能否使用&&、||
int main()
{
int a = 0;
scanf("%d", &a);
switch(a)
{
case (1 && 2):
printf("hehe");
break;
case 4:
printf("haha");
break;
}
return 0;
}
但问题来了,虽然第二个没有报错,可如果尝试对第二个代码进行输入的话会发现,输入 1 ,打印 hehe, 输入 2 ,却不打印任何东西,而我们逻辑上是同时输入 1 和 2 才打印 hehe,并且如果对代码进行添加 default 则会发现输入 2 ,打印的是 xixi
同理,把 && 换成 || 得到的结果也是一样的
#include<stdio.h>//测试case后面能否使用&&、||
int main()
{
int a = 0;
scanf("%d", &a);
switch(a)
{
case (1 || 2):
printf("hehe");
break;
case 4:
printf("haha");
break;
default:
printf("xixi");
}
return 0;
}
结论:从以上现象可以看出,不论编译器是否报错,case 后面的常量表达式中都不能包括 && 和 || ,或者说,对于 && 和 || 及其后面的值,编译器都会选择忽略,并且还会因某种原因导致后面 case 标签的报错