Можете ли вы заставить PC Lint игнорировать определенные специальные перечисления, такие как "myenum_min" и "myenum_max"

Итак, учитывая следующий код:

typedef enum
{
    myenum_a   = 1,
    myenum_b   = 2,
    myenum_c   = 3,
    myenum_max = 4
}myenum_t;

тогда позже

myenum_t test;

switch (test)
{
    case myenum_a:
    {
        // do stuff
    }
    case myenum_b:
    {
        // do stuff
    }
    case myenum_c:
    default:
    {
        // do stuff
    }
}

Когда я запускаю lint для этого, я получаю ошибку 788: "myenum_max" не используется в переключателе по умолчанию ".

Я знаю, что могу использовать "//! E788", чтобы игнорировать это правило для данного конкретного оператора switch, но это означает:

  • это правило будет игнорироваться для потенциальных допустимых перечислений, которые отсутствуют.
  • Я должен добавить эту строку везде, где я добавляю такой оператор switch.

Или я могу полностью удалить правило с помощью "// -e788", но:

  • Опять же, это правило будет игнорироваться для допустимых отсутствующих перечислений для ВСЕХ типов перечислений - так что еще хуже.

Что я действительно хочу, но не уверен, как это сделать (или, если она существует), так это игнорировать правило для данного перечисления что-то вроде:

typedef enum
{
    myenum_a   = 1,
    myenum_b   = 2,
    myenum_c   = 3,
    myenum_max = 4   // !eXXX  - ignore this enum
}myenum_t;

Это возможно?

1 ответ

Решение

PC-Lint не предоставляет специальной команды для подавления сообщений, касающихся значений перечисления, НО предоставляет опцию -estring(#, string) подавить конкретное сообщение об ошибке, содержащее указанную строку. Это может использоваться для подавления определенных сообщений в определенных значениях перечисления.

Для вашего примера это должно работать:

//lint -estring(788, myenum_max)

добавление

Опция -estring(#, string) был представлен с PC-Lint версии 9.00.

Другие вопросы по тегам