Тело оператора switch
на языке C: один непрерывный составной оператор с несколькими точками входа.Каждая метка case/default
является точкой входа .Вы можете ввести этот составной оператор в любой точке входа, и он будет продолжать выполняться до конца (если, конечно, не вмешается другой оператор перехода).Другими словами, case
метки в switch
работают так же, как goto
метки.В этом отношении метка default
ничем не отличается от меток case
.
Это именно то, что вы наблюдаете в своем эксперименте.Выражение в вашем switch
выглядит следующим образом
{
printf("%s","Default");
printf("%s","Case 0");
printf("%s","Case 1");
printf("%s","Case 2");
return 0;
}
Вы вводите это утверждение через ярлык default:
в самом начале.Так как вы не изменяете поток управления после входа в тело вашего switch
(кроме, возможно, неуместного финала return
), все четыре printf
s изменяются на "огонь".
Смысл вашего вопроса, который начинается с "Но как только компилятор узнает, что он должен выполнить оператор по умолчанию ...", мне неясен.Функциональность конструкции switch/case
в C такая же, как я описал выше.Вот что "знает компилятор".С другой стороны, вы, похоже, следуете каким-то совершенно необоснованным заблуждениям, придуманным самим собой, о том, что делает switch/case
, и по какой-то причине ожидаете, что компилятор будет следовать тем же заблуждениям.Я бы сказал, что вам нужно прочитать книгу об основах языка Си, а не пытаться угадать, что делают различные языковые элементы.
Нет ничего плохого в том, чтобы сначала сделать случай default
.Учитывая то, что я сказал выше, в некоторых ситуациях порядок меток внутри оператора имеет значение .Когда это имеет значение, вы должны организовать их в соответствии с вашими намерениями.Если вам нужен ваш default
чехол первым, сделайте его первым.Если вам это не нужно (или это не имеет никакого значения), вы можете поместить его в последнюю очередь или куда угодно, где хотите.