статический анализатор gcc (Weffc ++): исключить каталоги

У меня есть большой проект, который использует много, много библиотек. Некоторые из них: HDF5, PugiXML, Boost.ASIO, Qt, MuParser и многие другие. Некоторые из этих библиотек включены по заголовку, а некоторые предварительно скомпилированы, а некоторые из них я скомпилировал сам. Я хотел бы использовать опцию gcc -Weffc++ чтобы обеспечить качество моего кода.

Проблема в том, что я получил более 2000 предупреждений, когда я включил эту опцию, и когда я быстро просмотрел список, примерно 1 из них было связано с моим проектом, и почти все остальное было от заголовков, которые я включил! Весь список не очень практичен. Есть ли способ указать gcc либо анализировать файлы из заданных каталогов, либо каким-либо образом исключать директивы (возможно, регулярное выражение?).

0

Решение

Комментарии в документации не являются хорошими новостями:

При выборе этой опции имейте в виду, что заголовки стандартной библиотеки не подчиняются всем этим рекомендациям; используйте «grep -v», чтобы отфильтровать эти предупреждения.

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

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Weffc++"#include <header1>
#include <header2>
#pragma GCC diagnostic push

Вы также можете использовать -isystem указать включаемые пути, которые подавляют определенные предупреждения из файлов, включенных через эти пути.

Рекомендация

Просто не используйте -Weffc++, Это дает мусор даже в вашем собственном проекте. Например, он попросит вас определить виртуальные деструкторы для все базовые классы, независимо от того, имеет ли это смысл. Он будет предупреждать, если вы не инициализируете каждый элемент в агрегатной инициализации. Подняв руки вверх и сказав: «Это предупреждение просто глупо!» в сотый раз я повернулся -Weffc++ и ушел с моей жизнью.

Есть намного лучшие инструменты для качества кода и применения стиля. Clang инструменты, такие как clang-tidy, clang-modernize, а также clang-format прийти к разуму.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]