LINUX.ORG.RU

Правильный try-except в Си


1

1

Сразу извиняюсь за глупые вопросы: я не программист, просто надо написать маленькую программу для себя.

Проблема такая. В процессе движения по коду постоянно открываются новые файлы и прочее, что нуждается в «закрытии». При этом постоянно нужно отслеживать ошибки. В итоге получается код типа такого:

...
if (!(f = fopen(...))) {
    return 1;
}
...
if (!(g = log_open(...))) {
    fclose(f);
    return 1;
}
...
if (!(h = door_open(...))) {
    log_close(g);
    fclose(f);
    return 1;
}
...
...
...
if (!(z = mind_open(...))) {
    ...
    door_close(h);
    log_close(g);
    fclose(f);
    return 1;
То есть со временем обработчик ошибки становится всё более жирным.

Как нормальные программисты это организуют? Не предлагать писать не на Си, пожалуйста.


Ответ на: комментарий от unsigned

ну, в продакшине, в здравом уме, это никто применять не будет. так, балавство. а вот по-поводу второй проблемы интерессно было бы услышать более развёрнутое обьяснение.

beastie ★★★★★
()
Ответ на: комментарий от anonymous

наверное я не против обычных макросов типа max min

такие макросы как раз не нужны, это легко делается простыми ф-иями.

mashina ★★★★★
()
Ответ на: комментарий от beastie

хотя, вопрос снимается: закавыку сам нашёл

beastie ★★★★★
()
Ответ на: комментарий от beastie

man longjmp, секция NOTES. Сам на это наткнулся, когда похожие трюки изобретал. Так у меня еще и в манах об этом ничего не было, кое-как докопался.

unsigned ★★★★
()
Ответ на: комментарий от unsigned

да, спасибо. ман подтвердил моё умозаключение. но почему не «ansi c»? =) gcc его кушает без проблем с -Wall -std=c89 -pedantic

beastie ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.