Почему "defau4t" является законным в заявлении о переключении?
Я придумал эту программу на каком-то другом сайте и подумал попробовать ее, вот программа:
#include <stdio.h>
int main()
{
int a=10;
switch(a)
{
case '1': printf("one");
break;
case '2': printf("two");
break;
defau4t: printf("none");
}
return 0;
}
Удивительно, но это компилируется без ошибок или предупреждений. Как это возможно? Не существует ли ошибка по ключевому слову "default"?
Может ли кто-нибудь объяснить это поведение?
Ответы
Ответ 1
Маркер не считается ключевым словом. Это метка перехода goto
с именем "defau4t", указывающая на мертвый код (после break;
of case '2':
)...
Попробуйте это для смеха (и бесконечного цикла):
switch(a)
{
case '1': printf("one");
break;
case '2': printf("two");
break;
defau4t: printf("none");
default: goto defau4t;
}
Ответ 2
Один недостаток с инструкцией switch
заключается в том, что вы можете без проблем входить и выходить из них с помощью goto
. В любой точке внутри switch
(или вне ее в этом отношении) вы можете поместить метку, с которой вы можете перейти с помощью goto
. Конечно, это очень плохая практика, так как она приводит к коду спагетти.
Итак, defau4t:
- это просто метка, и метки могут быть размещены почти везде в телах функций.
Ответ 3
Помимо этой опечатки по умолчанию.
Я думаю, вам нужно также обновить
case '1': printf("one");
break;
case '2': printf("two");
break;
to
case 1: printf("one");
break;
case 2: printf("two");
break;