Как отключить «значение перечисления, явно не обработанное в коммутаторе» только для одного блока регистра коммутатора? - PullRequest
0 голосов
/ 23 октября 2018

Можете ли вы сказать мне, как отключить предупреждение компилятора / кодовой модели только для одного блока switch / case?

В общем, я думаю, что очень полезно быть предупрежденным, но здесь он жалуется на перечисление 167значения, явно не обработанные в switch.

. Я нашел этот другой вопрос:

c ++ предупреждение: значение перечисления не обрабатывается в переключателе [-Wswitch]

В нем говорится, что вы можете избавиться от предупреждения с помощью default: break;, но в этом случае (недавний QtCreator с clang) это не применяется.

Я знаю, что мог бы изменить код на 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);
}

1 Ответ

0 голосов
/ 24 октября 2018

Как указано в комментарии пользователя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);
}
...