在c中,switch语句可以有2个参数吗?

Dhr*_*tra 6 c syntax comma switch-statement comma-operator

int main()
{
   switch(1,2)
   {
      case 1:printf("1");break;
      case 2:printf("2");break;
      default: printf("error");break;
   }
}
Run Code Online (Sandbox Code Playgroud)

这在c中有效吗?

我认为它不应该,但是当我编译它时,它显示没有错误并产生输出2.

Sou*_*osh 13

是的,这是有效的,因为在这种情况下,它,是一个逗号运算符.

引用C11,章节§6.5.17,逗号操作员,(强调我的)

逗号运算符的左操作数被计算为void表达式; 它的评估与右操作数之间存在一个序列点.然后评估右操作数; 结果有它的类型和价值.

此(评估并)丢弃该左操作数,并且使用的右侧(值)之一.所以,上面的陈述基本相同

switch(2)
Run Code Online (Sandbox Code Playgroud)

只是详细说明,它不会使用两个值,因为您可能已经预期了,例如,切换1或2.