Как отключить предупреждение о статическом анализе кода при строчном предупреждении в CDT (код C)?

У нас есть проект с использованием CDT в Eclipse. Это старый проект, который мы просто импортировали в Eclipse, и я хочу, чтобы мы начали использовать статический анализ кода, чтобы найти какие-либо странности.

Дело в том, что есть ряд строк, которые вызывают предупреждения, которые мы хотим просто игнорировать, причем основные из них являются провалами внутри операторов switch.

Я знаю, как это сделать для lint, но как насчет CDT? Есть ли однострочный комментарий, который я могу поставить прямо над линией?

Пример: ( "Без разрыва в конце дела" )

  case enChA:  
    nChannel++;
    // I want to ignore this fallthrough       
  case enChB:      
    nChannel++;
    // And this one...
  case enChC:
    nChannel++;
    // And this one...
  case enChD:
    nChannel++;
    // do some more stuff...
    break;

Ответ 1

Вы должны попробовать

//no break

перед следующим случаем.

Ответ 2

Эти параметры расположены в окне "Окно" → "Настройки" → "C/С++ → " Анализ кода ". Вы можете настроить параметры. Например, если вы выберите No break at the end of case, вы можете определить комментарий, который подавляет предупреждение. По умолчанию это" нет разрыва". Так что совпадающее копирование/вставка предупреждающего сообщения в комментарий работало в вашем случае:

CDT static code analysis

Как вы можете видеть, текст не должен быть точным совпадением, и он также не чувствителен к регистру.

Ссылаясь на ваш следующий вопрос о неиспользуемых переменных: при настройке Unused variable in file scope вы можете определить имена переменных, которые следует игнорировать:

enter image description here Существует два загадочных предопределенных исключения "@(#)" и "$ Id". К сожалению, я не смог найти официальную документацию, поэтому я просмотрел источник. Похоже, что checker просто проверяет, есть ли переменное имя contains() любое из указанных исключений. Если это произойдет, предупреждение будет подавлено.

За пределами Eclipse CDT существует популярный трюк с пустым литьем. Если компилятор предупреждает о неиспользуемой переменной, отбросьте ее на void. Эта операция не действует, поэтому она безопасна, но с точки зрения компилятора эта переменная теперь используется. Я обычно обертываю его в макрос, чтобы совершенно ясно понять, что я делаю, например.

#define UNUSED(var) (void)(var)

void foobar()
{
    int b;     // not used. 
    UNUSED(b); // now it used
}

Ответ 3

Решил.

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

Вот так:

      case enChC:
        ++nChannel;
        //No break at the end of case
      case enChD:
        ++nChannel;

Ответ 4

Как сказано, в этом конкретном случае его можно решить, добавив комментарий:

//no break

или

//no break at the end of case

Что действительно важно, так это (без разрыва).

Но также требуется, чтобы у вас не было больше комментариев между концом этого случая и следующим, или оно не будет работать. Например, следующий случай все равно приведет к предупреждению:

case enChC:
    ++nChannel;
    //No break
    //This second case decrease the value
  case enChD:
    ++nChannel;

Ответ 5

Вам нужно перейти на Eclipse Oxygen.3 (or.2).

Начиная с этих версий предупреждения или маркеры могут быть подавлены просто с помощью "Быстрого исправления".

Ответ 6

Я столкнулся с этим вопросом, и я просто хочу их устранить. Я попытался добавить /* no break */, вы должны убедиться, что он добавлен перед следующим "случаем". Это вопрос, с которым я столкнулся

Это решение, которое я использую:

Ответ 7

Чтобы отключить раздражающие уведомления, вам нужно перейти в Preferences- > C/С++ → Editor, а затем снять отметку с опций, которые говорят "Выделить неактивный код", "Показать проблемы при вводе" и т.д. Надеюсь, что это поможет.