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

    +2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    #define QVERIFY2(statement, description) \
    do {\
        if (statement) {\
            if (!QTest::qVerify(true, #statement, (description), __FILE__, __LINE__))\
                return;\
        } else {\
            if (!QTest::qVerify(false, #statement, (description), __FILE__, __LINE__))\
                return;\
        }\
    } while (0)

    Код из QTest либы Qt4.

    Запостил: GLaz, 22 Июня 2016

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

    • И как это юзают?
      Ответить
      • Это часть их либы для автоматизированного тестирования. Типа ассерта, но для тестов.
        QVERIFY2(someExpression, "Some expression doesn't work");
        Ответить
    • А в чём ГК? В return?
      Ответить
      • Нет. Легким движением руки, конструкция выше сворачивается в:
        #define QVERIFY2(statement, description) \
        do {\
        if (!QTest::qVerify(statement, #statement, (description), __FILE__, __LINE__))\
        return;\
        } while (0)
        Ответить
        • statement в скобки!
          Ответить
          • а нужно? пример плохого использования приведите
            Ответить
            • #define SEQ(x, y) x, y
              
              QVERIFY2(SEQ(a, b), "OUCH");
              Передаст лишние аргументы в qVerify. Если qVerify ещё и перегружен, подобные косяки могут остаться незамеченными.
              Ответить
              • Угу. Спасибо. Логичность конструкции оставляет желать лучшего, но, всё же, возможна.
                Ответить

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