C 为什么我使用逻辑表达式作为案例标签的代码会抛出错误? 开关(at){ 案例(at>0和&at
恐怕这是不可能的。引用C 为什么我使用逻辑表达式作为案例标签的代码会抛出错误? 开关(at){ 案例(at>0和&at,c,switch-statement,C,Switch Statement,恐怕这是不可能的。引用C11,第§6.8.4.2章 每个案例标签的表达式应为整数常量表达式,且不得有两个 同一开关语句中的case常量表达式应具有相同的值 转换后。[……] 因此,case标签表达式不能依赖于运行时生成的值 您可以使用一个完整的语法来实现您想要的,比如 switch(at){ case (at>0 && at<5) : printf("Average Time Taken (Hrs)\n%d.0",at); printf
C11
,第§6.8.4.2章
每个案例
标签的表达式应为整数常量表达式,且不得有两个
同一开关语句中的case常量表达式应具有相同的值
转换后。[……]
因此,case
标签表达式不能依赖于运行时生成的值
您可以使用一个完整的语法来实现您想要的,比如
switch(at){
case (at>0 && at<5) :
printf("Average Time Taken (Hrs)\n%d.0",at);
printf("Your Salary is Rs.%d",pj*1500 + 5000);
break;
switch(at){
case 1:
case 2:
case 3:
case 4:
printf("Average Time Taken (Hrs)\n%d.0",at);
printf("Your Salary is Rs.%d",pj*1500 + 5000);
break;
//some other case
否则,如果您可以使用gcc
扩展,您可以使用,类似于
switch(at){
case (at>0 && at<5) :
printf("Average Time Taken (Hrs)\n%d.0",at);
printf("Your Salary is Rs.%d",pj*1500 + 5000);
break;
switch(at){
case 1:
case 2:
case 3:
case 4:
printf("Average Time Taken (Hrs)\n%d.0",at);
printf("Your Salary is Rs.%d",pj*1500 + 5000);
break;
//some other case
switch语句中的case值必须是编译时常量(如literal、static const或其中一个的#define)
switch(at){
case 1 ... 4:
printf("Average Time Taken (Hrs)\n%d.0",at);
printf("Your Salary is Rs.%d",pj*1500 + 5000);
break;
if(0 }否则如果(5不,这是不可能的。这是胡说八道。烧掉你认为这会编译的那本书。取而代之的是:一个if
语句。@StoryTeller这是不可能的,但它实际上是有意义的,因为如果我们可以在开关中包含表达式,这将是一个很好的功能。@SembeiNorimaki然后它就失去了用途。开关案例w然后,您将生成与if-elseif-else梯形图完全相同的代码。另一方面,仅使用常量表达式的开关大小写允许跳转表和其他优化。case
表达式是编译时整数。您的表达式不是。编译错误将被打印,而不是“抛出”。异常将被抛出。