您能告诉我如何仅对一个开关/大小写块禁用编译器/代码模型警告吗?
总的来说,我认为发出警告非常有用,但是在这里,它抱怨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);
}
答案 0 :(得分:2)
除了 user2567875 发布的已接受答案,如果您使用的是 GCC 构建工具,您可以获得相同的结果:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wswitch"
switch(...)
{
...
}
#pragma GCC diagnostic pop
注意 GCC
必须是大写。
答案 1 :(得分:1)
如用户463035818的注释中所指出,可以通过添加#pragma将消息的特定部分禁用:
bool MyClass::event(QEvent * e) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wswitch"
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;
}
#pragma clang diagnostic pop
return Piece::event(e);
}