LINUX.ORG.RU

Как вы обрабатываете ошибки с требующейся очисткой в Си?

 ,


1

6

Как вы поступаете в ситуациях когда нужно дернуть много функций, а они могут возвращать код ошибки после которого нужно что-то почистить?

Как живой пример:
Было: http://pastebin.com/BuUqYSRZ
Стало: http://pastebin.com/yHzMpv6C

Может вы используете какой-то другой метод?

пока у тебя программа не очень большая, можно и так делать, через goto. хотя это довольно нудно. если надо выделять много ресурсов и потом они могут где-то внезапно освобождаться, то можно использовать пулы и структуры с данными, которые при закрытии объекта, например, освобождают его ресурсы. обычно пишутся функции закрытия и вся возня централизованно делается там.

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

без do {} while(0) у тебя ошибка будет в этом примере: надо либо точку с запятой убрать после M(y), либо в фигурные скобки заключить

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

хорошо еще, что не «пришлось писать» :)

похоже, ты неправильно язык выбрал для своей задачи, раз у тебя такой баттхерт

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

берешь еще парочку долбоебов, заблудших в этот тред по ошибке и от малого ума и пиздуешь в детский сад на тихий час

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

Твои слова попали прямо в цель. Я уязвлен до самых глубин души..

makoven ★★★★★
()
  alloc_something();

  do {
    
    if(foo1() < 0)
      break;

    if(foo1() < 0)
      break;

    return RESULT_OK;

  } while (0);

  cleanup();
  return RESULT_ERROR;
zudwa
()
Ответ на: комментарий от makoven

Чтобы нужно ты не забыл точку с запятой

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