这是此问题的后续措施:

What's the use of do while(0) when we define a macro?

此宏用于Qt单元测试:

#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)

它会验证该语句,如果为false,则会生成带有给定描述的错误消息。

我的问题是,里面的if-else语句可能是什么原因?为什么不这样简单地定义它?
#define QVERIFY2(statement, description) \
do {\
    if (!QTest::qVerify(statement, #statement, (description), __FILE__, __LINE__))\
        return;\
    }\
} while (0)

我怀疑解释与所提到问题的类型相同。有任何想法吗?

更新

为了提供更多的上下文信息,还定义了以下宏的变体(不带说明):
#define QVERIFY(statement) \
do {\
    if (!QTest::qVerify((statement), #statement, "", __FILE__, __LINE__))\
        return;\
} while (0)

这表明,技巧与description参数有关。

最佳答案

一种可能的解释是,该宏确保在对statement进行评估之前先对description进行评估。

关于c++ - if-else是否在此宏中多余?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28773454/

10-09 19:55
查看更多