这是此问题的后续措施:
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/