2013-06-05 4 views
10

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

Дело в том, что существует множество строк, которые вызывают предупреждения, которые мы хотим просто игнорировать, причем основные из них являются провалами внутри операторов 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; 
+0

Этот вопрос привлечет больше интереса с более описательным названием, которое относится к разрыву в конце случая в инструкции switch. –

+0

@CraigMcQueen, Спасибо за подсказку, но я действительно спрашивал о том, как отключить статический анализ кода на основе строки. Перерыв был всего лишь конкретным примером предупреждения, которое я хотел отключить. Все сосредоточились на этом примере, но на самом деле это не был исходный вопрос. –

ответ

21

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

//no break 

до следующего случая.

+0

Я принял ваш ответ, но я также хотел бы игнорировать некоторые «объявления неиспользуемых переменных». Какие-нибудь советы по этому поводу? –

+0

Спасибо. Работает также как '/ * no break * /' или '/ * no break в конце case * /'. (Я не могу использовать комментарии '//', потому что я ограничен C89.) –

+0

Мне было бы любопытно узнать, почему оцепененные орехи в eclipse решили, что «без перерыва» лучше, чем 30 * ПРОВАЛИВАТЬСЯ". О чем они думали? –

3

Решено.

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

Как это:

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

Вы могли бы проверить, работает ли он просто с «без перерыва»? – gkovacs90

+1

Я пришел сюда с той же проблемой. Я никогда бы не нашел эту настройку без SE. По умолчанию в Eclipse, если у вас есть точная строка «без перерыва» в любом месте комментария, где обычно идет перерыв (прямо перед оператором следующего случая), он удаляет предупреждение. Это не чувствительно к регистру, и даже «Дайте мне носорога»! LOL – dslake

-3

Чтобы отключить надоедливые уведомления, вам необходимо перейти в Настройки-> C/C++ -> Редактор, а затем снимите флажок опции, которые говорят «Highlight неактивный код», «Показать проблемы при вводе "и т. д. Надеюсь, это поможет.

+3

Это не то, что я хотел. Я хочу отключить конкретные экземпляры каждого предупреждения, а не все экземпляры. Раздражающие предупреждения важны, потому что, например, иногда вы хотите провалиться через корпус, а иногда это ошибка, поэтому предупреждение есть в первую очередь. –

8

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

CDT static code analysis

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

Ссылаясь на your follow-up question about unused variables: При настройке Unused variable in file scope вы можете определить имена переменных, которые должны быть проигнорированы:

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

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

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

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

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

//no break 

или:

//no break at the end of case 

Что действительно имеет значение не является (без перерыва).

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

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

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

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

0

Вы должны обновить Eclipse, Oxygen.3 (or.2).

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

Смежные вопросы