1. C++ / Говнокод #2051

    +66.8

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 27 Октября 2009

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

    • За delete зачет! :-)
      Ответить
    • кстати, а если эксепшн выкидывается по указателю вот так:

      throw new CHierCGException();

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

      throw (CHierCGException*) NULL;

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

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

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

          Всё в кучу свалял...
          Ответить
        • дык а если уже выкинули? :)
          Ответить
    • Жестяной кодище :)))
      Ответить
    • Лучшее за последнюю неделю, имхо
      Ответить

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