【问题标题】:In c, can a switch statement have 2 arguments? [duplicate]在c中,switch语句可以有2个参数吗? [复制]
【发布时间】:2016-10-13 12:49:51
【问题描述】:
int main()
{
   switch(1,2)
   {
      case 1:printf("1");break;
      case 2:printf("2");break;
      default: printf("error");break;
   }
}

这在 c 中有效吗?

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

【问题讨论】:

  • 如果您要问的话,有一种方法可以让 case 语句执行两种情况 - 只是不要使用逗号。
  • @jerry-jeremiah 那是什么,你能详细说明一下吗?

标签: c syntax switch-statement comma comma-operator


【解决方案1】:

是的,这是有效,因为在这种情况下,,comma operator

引用C11,第 6.5.17 章,逗号运算符,(强调我的

逗号运算符的左操作数被评估为 void 表达式;有一个 其求值与右操作数求值之间的序列点。 那么右边 评估操作数;结果有它的类型和值。

这(评估和)丢弃左侧操作数并使用右侧(side)的值。所以,上面的说法与

switch(2)

详细说明一下,它使用两个值,正如您可能已经预料到的那样,打开 1 或 2

【讨论】:

  • 这个逗号操作符在任何情况下都有用吗?我只是问这个,因为我认为在这种情况下它没有用。
  • @DhruvaMehrotra 嗯,这是一个广泛的问题。是与否,你永远不知道。技术上没有问题,仅此而已。
  • @DhruvaMehrotra 您可以看到它在重复问题中很有用的一些情况。其中,它在 C 中很少有用。在 C++ 中,你可以重载它,所以很多人会找到一些更有用的案例stackoverflow.com/a/5602236/995714
  • 在定义宏时,逗号操作符很有用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-08
  • 1970-01-01
  • 1970-01-01
  • 2013-07-31
  • 1970-01-01
相关资源
最近更新 更多