Switch: возможно ли по ошибке написать два одинаковых case'а?
На Хабрахабре, в комментариях к статье о Switch, было такое:
У if-else есть один большой недостаток: ошибка копипасты. В switch невозможно по ошибке написать два одинаковых case, в if-else это случается постоянно.
Что имел в виду автор?
На мой взгляд, ошибиться вполне себе можно. Например, написать два раза bar вместо bar и baz. Разве нет?
Switch Var {
Case "foo", "bar", "baz":
// do something
Default:
// do something else
}
Я бы спросил у автора. Создал аккаунт на Хабре, но сайт пишет, что я не могу комментировать записи старше 30 дней.
Ответы (2 шт):
Автор решения: Qwertiy
→ Ссылка
Нельзя на Си и Си++: https://ideone.com/htMInL
#include <iostream>
using namespace std;
int main()
{
volatile int x = 1;
switch (x)
{
case 1: break;
case 1: break;
}
return 0;
}
prog.cpp: In function ‘int main()’:
prog.cpp:12:5: error: duplicate case value
case 1: break;
^~~~
prog.cpp:11:5: note: previously used here
case 1: break;
^~~~
Нельзя на C#: https://ideone.com/Yx4zhb
using System;
public class Test
{
public static void Main()
{
int x = 1;
switch (x)
{
case 1: break;
case 1: break;
}
}
}
prog.cs(12,7): error CS0152: The label `case 1:' already occurs in this switch statement
prog.cs(11,7): (Location of the symbol related to previous error)
Compilation failed: 1 error(s), 0 warnings
Нельзя на Джаве: https://ideone.com/sLL76R
class Ideone {
public static void main (String[] args) throws Exception {
int x = 1;
switch (x) {
case 1: break;
case 1: break;
}
}
}
Main.java:7: error: duplicate case label
case 1: break;
^
1 error
Автор решения: Тарас Атавин
→ Ссылка
Ошибиться можно. Но
if (x==bar)
{
}
else
{
if (x==bar)
{
}
}
вместо
if (x==bar)
{
}
else
{
if (x==baz)
{
}
}
компилируется, а
switch (x)
{
case bar:
break;
case bar:
break;
}
вместо
switch (x)
{
case bar:
break;
case baz:
break;
}
– нет.