@Rohanshetty67

Как часто оператор goto используется в C?

Я все еще изучаю C. Я обнаружил, что команду goto можно использовать для одновременного выхода из всех вложенных циклов. Я также обнаружил, что он не очень широко используется в C. Тем не менее, я использую его регулярно, так как считаю, что он весьма полезен, и иногда он намного проще, чем типичные варианты. Вместо использования цикла я использовал оператор goto в своей небольшой программе, чтобы исправить ошибку пользователя.
Итак, меня беспокоит, должен ли я полностью отказаться от его использования?
#include <stdio.h>
#include <stdlib.h>

int main()
{
    /*A program to store a number in 4 bits only !*/
    printf("Enter x then z :\n");
    int x, y;
    Start:
    scanf("%d %d", &x, &y);
    if((x > 15) || (y > 15) || (x < 0) || (y < 0))
    {
        printf("Wrong numbers! : 0<= x,y <=15\n");
        printf("Enter the numbers again : \n");
        goto Start;
    }
    char z;
    x<<= 4;
    z = x + y;
    printf("z = %d", z);
    return 0;
}
  • Вопрос задан
  • 177 просмотров
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Полностью отказываться не надо. Иногда он все-таки может сильно упростить код. Но это большая редкость. Стоит его использование минимизировать, потому что goto часто приводит к очень сложно читаемому и поддерживаемому коду.

Вот текущий ваш код отлично реализуется и циклом while(true) c break, если числа правильные.
И если тут все еще более менее просто с goto, то если вы и дальше будете его использовать, то у вас рано или поздно в функции будет несколько меток и разветвленная структура переходов между ними - вы уже сами на следующий день будете рвать волосы на голове в попытках понять, что там происходит.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@mayton2019
Bigdata Engineer
Оператор goto является неотъемлемой частью любого процесора. Он реализован в виде команд JZ, JNZ.. e.t.c.
Вобщем де-факто он существует всегда. Хотя для языков высокого уровня и в особенности для т.н. структурного
программирования
считается что он мешает восприятию чтения кода. Тоесть в идеале вы должны
читать глазами код сверху-вниз.

Апологеты структурщины также считают что надо делать выход из системы вложенных циклов через флажки. Но как по мне for с флажками выглядит еще хуже чем for с goto.

Еще минусом в адрес goto является тот факт что он для машинного кода сбивает конвейер команд. Конвееру нужно время на прогрев чтобы заново заполниться после goto. Поэтому код будет работать непроизводительно
если он набит многочисленными goto.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы