У меня есть большой проект, который использует много, много библиотек. Некоторые из них: HDF5, PugiXML, Boost.ASIO, Qt, MuParser и многие другие. Некоторые из этих библиотек включены по заголовку, а некоторые предварительно скомпилированы, а некоторые из них я скомпилировал сам. Я хотел бы использовать опцию gcc -Weffc++
чтобы обеспечить качество моего кода.
Проблема в том, что я получил более 2000 предупреждений, когда я включил эту опцию, и когда я быстро просмотрел список, примерно 1 из них было связано с моим проектом, и почти все остальное было от заголовков, которые я включил! Весь список не очень практичен. Есть ли способ указать gcc либо анализировать файлы из заданных каталогов, либо каким-либо образом исключать директивы (возможно, регулярное выражение?).
Комментарии в документации не являются хорошими новостями:
При выборе этой опции имейте в виду, что заголовки стандартной библиотеки не подчиняются всем этим рекомендациям; используйте «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
прийти к разуму.
Других решений пока нет …