Подтвердить что ты не робот

Почему "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"?
Может ли кто-нибудь объяснить это поведение?

4b9b3361

Ответ 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;