В c может ли оператор switch иметь 2 аргумента? [дубликат]

этот вопрос уже есть ответ здесь:

int main()
{
   switch(1,2)
   {
      case 1:printf("1");break;
      case 2:printf("2");break;
      default: printf("error");break;
   }
}

это действительно в c?

Я думал , что этого не должно быть , но когда я скомпилировал его, он не показывает ошибки и выдает вывод 2.

1 ответов


Да, это действительный, потому что в этом случае , это оператор запятая.

цитирую C11 глава §6.5.17, оператор запятая, (выделено мной)

левый операнд оператора запятой оценивается как выражение void; существует точка последовательности между ее оценкой и оценкой правого операнда. затем правую вычисляется операнд; результат имеет свой тип и значение.

это (вычисляет и) отбрасывает левый операнд и использует значение правого (боковая) один. Таким образом, приведенное выше утверждение в основном совпадает с

switch(2)

просто чтобы уточнить, это не использовать два значения, как вы могли ожидать, что-то вроде включения 1 или 2.