Управляющий оператор goto вызывает безусловный переход управления на выполнение оператора, перед которым указана соответствующая метка.
goto метка;
Метка — это идентификатор, завершаемый двоеточием, который помечает оператор.
Метка должна предшествовать оператору, в вырожденном случае — пустому оператору. Можно переходить только на метки, указанные внутри текущей функции, нельзя перейти на метку, указанную в другой функции.
Часто говорят, что структурное программирование - это программирование без goto. Строго говоря, в этом операторе нет никакой необходимости. Оператор goto можно использовать только для выхода из глубоко вложенных циклов. В противном случае использование goto делает структуру программу запутанной и трудной для отладки. На использование оператора goto провоцирует плохо продуманный алгоритм.
Примечание 1
В функции не должно быть больше одного оператора goto.
Пример 1
main ()
{
. . .
/* не рекомендуется */
start: оператор
оператор
if (выр)
goto start;
оператор
оператор
...
}
прим. 1 демонстрирует плохой стиль программирования. Такое использование оператора goto делает программу плохо структурированной, а, следовательно, плохо отлаживаемой, ненадежной и неэффективной.
Пример 2
main ()
{
...
/* рекомендуется */
while (выр)
  {
   while (выр)
     {
      оператор
      while (выр)
        {
         while (выр)
           {
            оператор
            if (выр)
               goto end;
            оператор
            }
          оператор
          }
      }
   }
end:;
}
прим. 2 демонстрирует ситуацию, когда использование оператора goto оправдано.