Подтвердить что ты не робот

Отключить обнаружение ошибок Eclipse. (Ложные срабатывания Codan)

Мой опыт до сих пор заключается в том, что обнаружение ошибок Eclipse ужасно затруднительно без каких-либо решений (Tried __GXX_EXPERIMENTAL_CXX0X__, -std=c++0x, -std=c++11 в соседней каждой точке настроек). Я нахожусь в точке, что я больше не хочу искать решение. Теперь я просто хочу видеть исключительно реальные ошибки компилятора. Но как это сделать?

4b9b3361

Ответ 1

ОБНОВЛЕНИЕ: Я долгое время отправлял оригинальный ответ, и он устарел. Я дважды проверял сегодня (15 марта 2014 года): в Eclipse Kepler (Build id 20130614-0229) достаточно

  • добавить в Project > Properties > C/С++ Build > Настройки, а затем на вкладке "Параметры инструмента" Компилятор CCC С++ > Разный флаг -std=c++11,

  • затем в меню "Окно" > "Настройки" > "C/С++ > Сборка" на вкладке "Обнаружение" выбраны параметры встроенного компилятора CDT GCC и добавьте флаг -std=c++11 в команду, чтобы получить спецификации компилятора. На моей машине это выглядит после изменения:

    ${COMMAND} -E -P -v -dD -std=c++11 "${INPUTS}"

  • очистите и перестройте свой проект и ваш индекс (Project > C/С++ Index > Rebuild), поскольку Eclipse имеет тенденцию кэшировать сообщения об ошибках и показывать их, даже если они исчезли после изменения настройки.

Это действительно работает на моей машине. Если это не так, вы можете сделать снимок: С++ 11 полная поддержка Eclipse, хотя я не уверен в правильности этого подхода и не нужно делать это на своей машине. По состоянию на 7 марта 2014 года пользователи заявили, что они им помогли, тогда как вышеупомянутый подход не сделал.


Исходный пост с 2012 года, теперь устаревший:

Эти фиктивные ошибки исходят от Codan. Я также опубликовал отчет об ошибке (С++ 03!!!), но та же проблема появляется в последнем стабильном Eclipse, поэтому я не знаю, Думаю, что многое произошло: (

Обход проблемы:

Нажмите на свойства проекта, затем C/С++ Общие > Анализ кодa > Синтаксис и семантические ошибки и отмените выбор всех ложных ошибок, которые вы получаете.

Я просто хочу видеть исключительно реальные ошибки компилятора

Конечно, вы можете полностью отключить статический анализ, в этом случае вы можете выполнить именно то, что хотите.


ОБНОВЛЕНИЕ: 2 пользователя сообщили, что то, что написал Джовака, помогло им. Я пробовал то, что он написал, это не помогло мне с Juno SR1 и CDT 8.1.1. Возможно, разработчики Codan улучшили статический анализ в Juno SR2 и CDT 8.1.2.

Забастовкa >

Ответ 2

Я был обеспокоен ошибками Cordian для кода С++ 11, который отлично компилируется в gcc со всеми включенными предупреждениями. Я нашел то, что, по моему мнению, является основной причиной, по крайней мере, это было в моем случае. Несколько других вопросов о кордианских ошибках для С++ 11 закрыты как дубликаты этого вопроса и указывают на этот вопрос. Поэтому, хотя я бы опубликовал свой ответ здесь.

Вот что я нашел: Свойства проектa > С++ Общие > Препроцессор... > Записи > GNU С++ > Настройки встроенного компилятора CDT GCC имеют * __ cplusplus = 199711L * в качестве одной из записей.

Я изменил его следующим образом: В окне "Окно" > "Настройки" > "C/С++" > "Настройка" > "Настройки" > "Discovery" были выбраны настройки CDT GCC Builtin Compiler и изменены ${COMMAND} -E -P -v -dD ${INPUTS} на ${COMMAND} -E -P - v -std = С++ 11 -dD '$ {INPUTS}'. Затем нажмите "Применить". Ошибки исчезли после следующей сборки.

Я использую Juno SR2 с CDT 8.1.2 и файлы сделанные вручную.

Добавление немного большего цвета:

Я не эксперт, но вот что я думаю в моем случае:

Кордиан собирает ошибки несколькими способами.

Один анализирует выход компилятора. -std=c++11 в моем Makefile гарантировал, что эта часть работала правильно все время, поскольку вызов того же самого файла Makefile через терминал не означал никаких ошибок.

Другим является "Анализ кода". Для этого и, возможно, для других задач, Ecplise должен знать настройки, которые будет использовать компилятор. Eclipse найдет их, вызвав команду, которую я редактировал выше, и проанализировал вывод. Отметив "Распределить консоль в представлении консоли" перед тем, как нажать "Применить", можно просмотреть вывод этой команды. Эти параметры включают в себя каталоги и определяют такие как __cplusplus. Когда они соответствуют тому, что gcc будет использовать при вызове через мой Makefile, результаты будут согласованы.

Когда я экспериментировал с проблемой, используя сообщение #pragma внутри заголовков, я подумал, что __GXX_EXPERIMENTAL_CXX0X__ - это то, что не так, и некоторые предложения по установке для этого были заданы вручную, но это тоже было обходным путем.

Ответ 3

В новой установке Eclipse запуск одного макроса и восстановление индекса решают его:

Проекты- > Свойства- > Препроцессор Включает Выберите GNU С++ Выберите записи пользовательской настройки CDT Нажмите Добавить

и добавьте макрос препроцессора с именем __cplusplus и значением 201103L.

Наконец, перестройте индекс. (Project- > C/С++ Index- > ​​Rebuild)

Ответ 4

Вы также можете удалить проблемные части кода из области CDT, проделав следующие шаги:

Перейти к Свойствам проекта → C/С++ Общие → Препроцессор включает путь, Макросы и т.д. Выберите желаемый язык на вкладке "Вкладки" Add- > Макрос препроцессора Введите имя "MY_CODAN_MACRO" и значение "1"

Теперь вы можете написать:

#idndef MY_CODAN_MACRO
// this code is visible by compiler only
#else
// this code is visible by code analysis and CDT, but not visible by compiler
#endif

Я думаю, что этот трюк возможен в Индиго+. Я использую Juno.

Ответ 5

Я понимаю, что вопрос задавался давно, но поскольку проблема остается (я пользователь Kepler и получаю те же ошибки), я отправлю еще одно возможное обходное решение.

Можно создать отдельный исходный файл и переопределить функции, которые он хочет использовать там (например, в общем пространстве имен). После того, как я создал такую ​​функцию,

std::string to_string(long long num) {
    return std::to_string(num);
}

и начал использовать to_string вместо std::to_string в основных источниках (я добавил дополнительный с включением). Eclipse больше не отмечал код как ошибки.

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