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

    +1011

    1. 1
    #define RETURN_OR_THROW_EXCEPTION_IF_ERROR(Expression, Exception) if(!Expression) throw Exception; return Expression

    Запостил: AnimeGovno-_-, 03 Ноября 2011

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

    • >RETURN_OR_THROW_EXCEPTION_IF_ERROR
      О как нынче ассерты стали называть.
      Ответить
      • показать все, что скрытоСам ты ассерт. В С++ по стандарту assert не кидает исключения языка или не вызывает return.
        assert совершенно для другого предназначен. Он только констатирует наличие ошибок программирования в режиме отладочной компиляции.
        Ответить
      • насрать на название
        двойное вычисление Expression, вот что печально
        Ответить
        • Да тут однозначно процедура с функциональностью ассерта нужна, если таковой еще нет.

          А return туда клеить - какое-то безумие.
          Ответить
          • > А return туда клеить - какое-то безумие
            +100500
            "macros that affect control flow is a _very_ bad idea"
            http://lxr.linux.no/linux+v3.1/Documentation/CodingStyle#L624
            Ответить
    • Видимо, автору насрать, что Expression будет вычисляться дважды. Он также не знает, что Expression нужно заключать в скобки:
      RETURN_OR_THROW_EXCEPTION_IF_ERROR(1 - 1, 1)
      Ответить
    • #define RETURN_OR_THROW_EXCEPTION_IF_ERROR(Expression, Exception) {if(!(Expression)) throw (Exception); return (Expression);}
      Как минимум должно быть так, но это автора не спасёт, тк Expression вычисляется 2жды.
      Ответить
      • ну да, автор ещё не пробовал
        if (a > 0) RETURN_OR_THROW_EXCEPTION_IF_ERROR (0, 1);
        Ответить
    • if(!Expression) throw Expression; return Expression
      Ответить
    • ПРЕПРОЦЕССОРОГОВНО
      Ответить
    • http://govnokod.ru/8405

      Зачем тебе столько говна, говно?
      Ответить

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