Другие управляющие операторы
Операторы, определяющие циклические вычисления, которые мы рассмотрели, и условные операторы if, if-else и switch, являются важнейшими средствами управления выполнением программы на языке Си. Они должны использоваться для реализации общей структуры программы. Три оператора, рассматриваемые ниже, обычно рассматриваются реже, поскольку слишком частое их использование ухудшает читаемость программы, увеличивает вероятность ошибок и затрудняет ее модификацию. Никлаус Вирт далопределение структурного программирования, как программирования без goto.
Оператор break
Оператор break используется для выхода из оператора while, do, for, switch, непосредственно его содержащего. Управление передается на оператор, следующий за оператором, из которого осуществлен выход. Оператор break имеет форму
Пример:
while((ch=getchar()) != EOF)
/* читается символ ch=getchar(). Если он не совпадает с EOF, выполняется тело оператора while */
{
if(ch=='\n')
break;
putchar(ch);
}
Работа цикла полностью прекращается, как только при вводе встречается символ "новая строка".
Оператор continue
Оператор continue служит для пропуска оставшейся части выполняемой итерации цикла, непосредственно его содержащего. Если условиями цикла допускается новая итерация, то она выполняется, в противном случае цикл завершается. Оператор continueимеет следующую форму:
Пример:
while((ch=getchar()) != EOF)
/* читается символ ch=getchar(). Если он не совпадает с EOF, выполняется тело оператора while */
{
if(ch=='\n')
continue;
putchar(ch);
}
В версии с оператором continue просто пропускаются символы "новая строка", а выход из цикла происходит, только когда читается признак EOF.
Оператор goto
Оператор goto предназначен для безусловной передачи управления к оператору с указанной меткой. Он имеет следующую форму:
Керниган и Ритчи считают оператор goto "чрезвычайно плохим" средством и предлагают применять его как можно реже или не применять совсем. Приведем пример записи оператора:
Чтобы этот оператор выполнялся правильно, необходимо наличие другого оператора, имеющего метку part1. В этом случае запись оператора начинается с метки, за которой следует двоеточие:
part1: printf("точка перехода\n");
! |
Избегайте использовать goto! С тех пор как Дейкстра опубликовал свой знаменитый труд "Вредность оператора GOTO", специалисты бились над методами структурного программирования. Полное описание структурного программирования выходит за рамки этого курса лекций, однако отметим, что нужно очень осторожно использовать операторы: goto, break, continue,return. |
Если без операторов goto, break, continue, return никак не обойтись, то при использовании goto переходите вперед по коду, а не назад.
Оператор break лучше не использовать для преждевременного выхода из цикла, его полезно использовать внутри оператораswitch.
Оператор continue нежелательно использовать для модификации логики циклов.
Почему нежелательно использовать функции со многими операторами return. Один из принципов структурного программирования состоит в том, что программа должна иметь одну точку входа и одну точку выхода. Функции со многими операторами return более сложны для чтения, чем те, которые имеют лишь один оператор return в конце тела функции.
|