5.10. Инструкция gotoИнструкция goto обеспечивает безусловный переход к другой инструкции
внутри той же функции, поэтому современная практика программирования выступает
против ее применения. goto метка; где метка – определенный пользователем идентификатор. Метка ставится перед инструкцией, на которую можно перейти с помощью goto, и должна заканчиваться двоеточием. Нельзя ставить метку непосредственно перед закрывающей фигурной скобкой. Если же это необходимо, их следует разделить пустой инструкцией: end: ; // пустая инструкция }
int oops_in_error() {
// mumble ...
goto end;
// ошибка: переход через объявление
int ix = 10;
// ... код, использующий ix
end: ;
}
Правильная реализация функции помещает объявление ix и использующие его инструкции во вложенный блок: int oops_in_error() {
// mumble ...
goto end;
{
Причина такого ограничения та же, что и для объявлений внутри блока switch:
компилятор должен гарантировать, что для объявленного объекта конструктор и
деструктор либо выполняются вместе, либо ни один из них не выполняется. Это
и достигается заключением объявления во вложенный блок. // переход назад через объявление не считается ошибкой.
void
mumble ( int max_size )
{
begin:
int sz = get_size();
if ( sz <= 0 ) {
// выдать предупреждение ...
goto end;
}
else
if ( sz > max_size )
// получить новое значение sz
goto begin;
{ // правильно: переход через целый блок
int ia = new int[ sz ];
doit( ia, sz ) ;
delete [] ia;
}
end:
;
}
Использование инструкции goto резко критикуется во всех современных языках программирования. Ее применение приводит к тому, что ход выполнения программы становится трудно понять и, следовательно, такую программу трудно модифицировать. В большинстве случаев goto можно заменить на инструкции if или циклы. Если вы все-таки решили использовать goto, не перескакивайте через большой фрагмент кода, чтобы можно было легко найти начало и конец вашего перехода. Назад ВпередСодержание |
Нет комментариев. Оставить комментарий: |