В c может ли оператор switch иметь 2 аргумента? [дубликат]
этот вопрос уже есть ответ здесь:
- что делает оператор запятой? 8 ответов
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.