Кресты / Говнокод #2051 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
// Найдено глубоко в продакшн-коде некоего транслятора:
HRESULT hr = S_OK;
try {
      hr = ParseSection(sourceTemplate, output, CS_IF);
}
CATCH_CG_EXCEPTION(this, hr)
CATCH_CG_EXCEPTION_END

// далее смотрим определения этих чудо-макросов
#define CATCH_CG_EXCEPTION(gen, hr) \
catch (CHierCGException* e)  { \
     (gen)->WriteExceptionMessage(e); \
     if (e->m_bContinue) { \
            if (e->m_useHRESULT) hr = e->m_hResult; else hr = E_FAIL; \
     } \
     delete e; \
     if (!(e->m_bContinue))

#define CATCH_CG_EXCEPTION_END \
      throw; \
}

Исключительно говнистая обработка исключений :-)

Запостил: Orfest Orfest, (Updated )

Комментарии (9) RSS

  • кстати, а если эксепшн выкидывается по указателю вот так:

    throw new CHierCGException();

    , то delete надо делать? Кто читал стандарт, можете пояснить? Ведь, по идее, можно выкинуть указатель хоть на NULL:

    throw (CHierCGException*) NULL;

    PS: то, что delete e стоит перед if-ом, я и так вижу.
    Ответить
    • Конечно, надо делать delete, ведь иначе указатель потеряется, память утечет.
      throw (MyType*)NULL; до сих пор встречать не приходилось 🙂
      Ведь, естественно, у исключения хочется почитать what()
      Ответить
      • Можно выкинуть new someClass();
        Затем удалить данные.
        Затем перехватить уже указатель на ничто выше. =]
        Снова выделить память под эту ошибку на другом уровне... Ууу... Сколько возможностей... (j/k)

        Мне кажется это кто-то из Java мигрировал...
        Ответить
      • Хотя Java беженец не стал бы писать макрасов...

        Видимо это просто кривокодер...

        Всё в кучу свалял...
        Ответить

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8