如何仅针对一个 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必须大写