из любого места данной функции, т. е. метка видима на протяжении всей функции.
В качестве еще одного примера рассмотрим такую задачу: определить, есть ли в массивах a и b совпадающие элементы. Один из возможных вариантов ее реализации имеет следующий вид:
>for (i = 0; i ‹ n; i++)
> for (j = 0; j ‹ m; j++)
> if (a[i] == b[i])
> goto found;
>/* нет одинаковых элементов */
> …
>found:
>/* обнаружено совпадение: a[i] - b[i] */
Программу нахождения совпадающих элементов можно написать и без goto, правда, заплатив за это дополнительными проверками и еще одной переменной:
>found = 0;
>for (i = 0; i ‹ n && !found; i++)
> for (j = 0; j ‹ m && !found; j++)
> if (a[i] == b[j])
> found = 1;
>if (found) /* обнаружено совпадение: a[i-1] - b[j-1] */
> …
>else
> /* нет одинаковых элементов */
> …
За исключением редких случаев, подобных только что приведенным, программы с применением goto, как правило, труднее для понимания и сопровождения, чем программы, решающие те же задачи без goto. Хотя мы и не догматики в данном вопросе, все же думается, что к goto следует прибегать крайне редко, если использовать эту инструкцию вообще.