如何仅针对一个 switch case 块禁用 "enumeration value not explicitly handled in switch"?
How to disable "enumeration value not explicitly handled in switch" just for one block of switch case?
你能告诉我如何仅对 switch/case 的一个区块禁用 compiler/codemodel 警告吗?
总的来说,我认为被警告是非常有用的,但是这里它抱怨switch
.
中没有明确处理的167个枚举值
我发现了另一个问题:
它说您可以使用 default: break;
消除警告,但在这种情况下(最近的 QtCreator 带有 clang)这不适用。
我知道我可以将代码更改为 if/else if/else if ..
,但我希望处理的案例列表会随着时间的推移而增加,所以我更愿意继续使用 switch/case
。
所以,我的问题是,是否有任何 keyword/macro/comment/attribute 说只忽略这个单个块的问题?
以下代码产生警告,其他 167 个值似乎是 QEvent::type()
的可能 return 值,它们是 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);
}
正如 user463035818 在评论中指出的,可以通过添加 #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);
}
除了 user2567875 发布的已接受答案外,如果您使用的是 GCC 构建工具。,您可以获得相同的结果:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wswitch"
switch(...)
{
...
}
#pragma GCC diagnostic pop
注意GCC
必须大写
你能告诉我如何仅对 switch/case 的一个区块禁用 compiler/codemodel 警告吗?
总的来说,我认为被警告是非常有用的,但是这里它抱怨switch
.
我发现了另一个问题:
它说您可以使用 default: break;
消除警告,但在这种情况下(最近的 QtCreator 带有 clang)这不适用。
我知道我可以将代码更改为 if/else if/else if ..
,但我希望处理的案例列表会随着时间的推移而增加,所以我更愿意继续使用 switch/case
。
所以,我的问题是,是否有任何 keyword/macro/comment/attribute 说只忽略这个单个块的问题?
以下代码产生警告,其他 167 个值似乎是 QEvent::type()
的可能 return 值,它们是 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);
}
正如 user463035818 在评论中指出的,可以通过添加 #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);
}
除了 user2567875 发布的已接受答案外,如果您使用的是 GCC 构建工具。,您可以获得相同的结果:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wswitch"
switch(...)
{
...
}
#pragma GCC diagnostic pop
注意GCC
必须大写