Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 是否可以在案例陈述中执行OR?_C_Syntax_Switch Statement - Fatal编程技术网

C 是否可以在案例陈述中执行OR?

C 是否可以在案例陈述中执行OR?,c,syntax,switch-statement,C,Syntax,Switch Statement,我想做一些类似的事情: case someenumvalue || someotherenumvalue: // do some stuff break; 这在C语言中合法吗 我正在切换的变量是枚举列表数据结构 您可以相信这样一个事实,即case语句将在没有中断的情况下失效: case SOME_ENUM_VALUE: // fall-through case SOME_OTHER_ENUM_VALUE: doSomeStuff(); break; 您也可以

我想做一些类似的事情:

case someenumvalue || someotherenumvalue:
    // do some stuff
    break;
这在C语言中合法吗


我正在切换的变量是枚举列表数据结构

您可以相信这样一个事实,即
case
语句将在没有
中断的情况下失效:

case SOME_ENUM_VALUE:  // fall-through
case SOME_OTHER_ENUM_VALUE:
    doSomeStuff();
    break;
您也可以在更复杂的情况下使用此选项,其中两个值都需要共享工作,但其中一个(或多个)值还需要特定工作:

case SOME_ENUM_VALUE:
    doSpecificStuff();
    // fall-through to shared code
case SOME_OTHER_ENUM_VALUE:
    doStuffForBothValues();
    break;
您可以使用以获得该效果:

case someenumvalue:
case someotherenumvalue :
    do some stuff
    break;

case
语句类似于
goto
——您的程序将执行它之后的所有语句(包括其他
case
语句),直到您到达
开关
块的末尾或
中断
是,您只需跳过第一个
案例中的
中断
,即可实现直通效果:

switch (expr) {
    case someenumvalue: // no "break" here means fall-through semantic
    case someotherenumvalue:
        // do some stuff
        break;
    default:
        // do some other stuff
        break;
}
许多程序员由于忘记插入
break
,而在无意中陷入了失败的陷阱。这在过去给我带来了一些麻烦,尤其是在我无法访问调试器的情况下。

您需要:

case someenumvalue:
case someotherenumvalue :
    do some stuff
    break;

正如其他人所具体说明的,是的,您可以通过使用一个下拉列表,逻辑地将所有内容组合在一起:

case someenumvalue:         //case somenumvalue 
case someotherenumvalue :   //or case someothernumvalue
   do some stuff
   break; 
但是,要直接回答您的问题,您可以对它们执行逻辑或按位
操作(这只是操作结果的一个例子),只需小心您得到了预期的结果:

enum
{
  somenumvalue1 = 0,
  somenumvalue2 = 1,
  somenumvalue3 = 2
};

int main()
{
  int val = somenumvalue2; //this is 1
  switch(val) {
     case somenumvalue1: //the case for 0
          printf("1 %d\n", mval);
          break;
     case somenumvalue2 || somenumvalue3: //the case for (1||2) == (1), NOT the
          printf("2 %d\n", mval);         //case for "1" or "2"
          break;
     case somenumvalue3:     //the case for 2 
          printf("3 %d\n", mval);
          break;
  }
  return 0;
}
如果您选择执行第二个实现,请记住,由于您正在执行
|
's操作,您将得到1或0,根据情况而定。

的可能重复(可能不是C,但完全相同的问题和解决方案)