Правила программирования на Си и Си++

       

Функция должна иметь лишь одну точку выхода


Это правило применимо лишь к программам на Си. Вообще, множество переходов goto к одной точке выхода лучше, чем много операторов return. Этим способом вы можете поместить точку прерывания у единственной точки выхода, вместо того, чтобы возиться с несколькими прерываниями. Например§:

f()

{

    int возвращаемое_значение = ОШИБКА;

    if( некое_условие )

    {

        // ...

        возвращаемое_значение = НЕЧТО;

        goto выход;

}

else

{

    // ...



    возвращаемое_значение = НЕЧТО_ЕЩЕ;

    goto выход;

}

выход:

    return возвращаемое_значение;

}

Этот метод не срабатывает в Си++, потому что функции конструктора вызываются неявно в качестве части объявления; объявление часто скрывает вызов функции. Если вы пропускаете объявление, то вы пропускаете и вызов конструктора. Например, в следующей программе деструктор для x вызовется, а конструктор — нет:

foo()

{

    if( некое_условие )

        goto  выход;

    некий_класс x;  // Конструктор не вызывается. (Оператор

                    // goto перескакивает через него.)

                    // ...

выход:

                // Здесь вызывается деструктор для x

                //

при выходе x из области видимости.

}

Вследствие этой проблемы лучше всего совсем избегать переходов goto в программах на Си++.



Содержание раздела