Этот вопрос на самом деле является результатом интересного обсуждения на сайте programming.reddit.com некоторое время назад. В основном это сводится к следующему коду:
int foo(int bar)
{
    int return_value = 0;
    if (!do_something( bar )) {
        goto error_1;
    }
    if (!init_stuff( bar )) {
        goto error_2;
    }
    if (!prepare_stuff( bar )) {
        goto error_3;
    }
    return_value = do_the_thing( bar );
error_3:
    cleanup_3();
error_2:
    cleanup_2();
error_1:
    cleanup_1();
    return return_value;
}
Использование goto здесь, по-видимому, является лучшим способом, что приводит к самому чистому и эффективному коду всех возможностей или, по крайней мере, так мне кажется. Цитата: Стив Макконнелл в Code Complete:
Goo полезен в рутине, которая выделяет ресурсы, выполняет операции над этими ресурсами и затем освобождает ресурсы. С goto, вы можете очистить в одном разделе кода. Goo уменьшает вероятность того, что вы забудете освобождать ресурсы в каждом месте вы обнаружите ошибку.
Другая поддержка этого подхода взята из книги драйверов устройств Linux, в в этом разделе.
Как вы думаете? Является ли этот случай действительным использованием для goto в C? Предпочитаете ли вы другие методы, которые производят более сложный и/или менее эффективный код, но избегайте goto?
