【发布时间】:2018-10-23 18:38:19
【问题描述】:
您能告诉我如何仅针对一个开关/案例块禁用编译器/代码模型警告吗?
总的来说,我认为被警告是非常有用的,但是这里它抱怨在switch中没有明确处理的167个枚举值。
我发现了另一个问题:
c++ warning: enumeration value not handled in switch [-Wswitch]
它说您可以使用default: break; 消除警告,但在这种情况下(最近使用clang 的QtCreator)这不适用。
我知道我可以将代码更改为if/else if/else if ..,但我希望处理的案例列表会随着时间的推移而增加,所以我更愿意继续使用switch/case。
所以,我的问题是,是否有任何关键字/宏/注释/属性表示仅针对单个块忽略该问题?
以下代码产生警告,其他 167 个值似乎是 QEvent::type() 的可能返回值,它们是 Qt 的一部分:
bool MyClass::event(QEvent * e) {
switch(e->type()) {
case QEvent::HoverEnter:
qDebug() << "enter";
return true;
case QEvent::HoverLeave:
qDebug() << "leave";
return true;
case QEvent::HoverMove:
qDebug() << "move";
return true;
default:
break;
}
return Piece::event(e);
}
【问题讨论】:
-
这不是使用
switch的优势吗?当“处理的案件清单将随着时间的推移而增加”时,您不能轻易错过一个,因为您会收到警告。你能显示minimal reproducible example吗?看看为什么default没有帮助会很有趣 -
我猜有什么区别是“明确地”。您确实处理所有情况,但没有明确处理
-
请在问题中逐字添加警告
-
this 不是真正的骗子,但问题有答案
-
您可以发布自己问题的答案。我对clang不熟悉,也没有心情去确定足以写出答案,但是恕我直言,您的编辑应该是一个答案
标签: c++ clang qt-creator