Без оператора break код в конце одного случая будет преобразован в код следующего случая.
Итак, когда x
достигает значения 6.1, так как x*x
все ещеменьше 50, вы нажимаете case 6
, и без оператора перерыва вы также вводите код case 5
и case 4
. Таким образом, значение 5.1 (результат уменьшения x
) печатается 3 раза.
Это хорошая возможность подчеркнуть, что вы должны скомпилировать свой код со всеми включенными предупреждениями. С gcc -W -Wall
ваша программа выдаст следующие предупреждения:
.code.tio.c: In function ‘main’:
.code.tio.c:12:17: warning: this statement may fall through [-Wimplicit-fallthrough=]
printf("case 6, x= %f\n ", x);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.code.tio.c:14:13: note: here
case 5:
^~~~
.code.tio.c:15:17: warning: this statement may fall through [-Wimplicit-fallthrough=]
printf("case 5, x=%f\n ", x);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
.code.tio.c:17:13: note: here
case 4:
^~~~
Если ваш код намеренно хочет перейти к следующему случаю, gcc
будет учитывать комментарийкомментируя это намерение. Предупреждение не будет отправлено.
switch ((int) x) {
case 6:
x--;
printf("case 6, x= %f\n ", x);
// FALLTHROUGH
case 5:
printf("case 5, x=%f\n ", x);
// FALLTHROUGH
case 4:
printf("case 4, x=%f\n ", x);
break;
default:
printf("something else, x=%f\n ", x);