【发布时间】:2021-07-02 07:26:25
【问题描述】:
qCDebug() 宏有一个简单的声明,但是使用“degenerate for-loop”而不是简单直接的if 有什么好处?
#define qCDebug(category, ...) \
for (bool qt_category_enabled = category().isDebugEnabled(); qt_category_enabled; qt_category_enabled = false) \
QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC, category().categoryName()).debug(__VA_ARGS__)
现代编译器在优化高于 -O0 时给出了相同的结果,所以这不应该是原因。
循环体中没有使用变量qt_category_enabled。
将它用作宏似乎也不需要任何副作用,例如添加另一个级别的范围。
那么,为什么不只是
#define qCDebug(category, ...) \
if (category().isDebugEnabled()) \
QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC, category().categoryName()).debug(__VA_ARGS__)
?
【问题讨论】:
标签: c++ qt coding-style