Я хотел бы выяснить, какая комбинация флагов для проверки ошибок наиболее экстремальна для g ++ (4.7). Мы не используем новую спецификацию C ++ 11, так как нам нужно кросс-компилировать код с более старыми компиляторами, и эти старые компиляторы (в основном g ++ 4.0) часто вызывают проблемы, которые просто игнорируются g ++ 4.7.
Прямо сейчас мы используем следующий набор флагов:
-Wall -Wcomment -Wformat -Winit-self -ansi -pedantic-errors \
-Wno-long-long -Wmissing-include-dirs -Werror -Wextra
но эта комбинация не идентифицирует проблемы, такие как двойной тип, передаваемый в функцию, которая ожидает int, или сравнение между подписанным и unsigned int, и это заставляет старый компилятор подавиться этим.
Я прочитал документацию и -Wsign-compare
должен быть включен -Wextra
но на практике кажется, что это не так, поэтому я мог что-то пропустить …
-ansi
псевдоним для стандарта по умолчанию без расширений GNU. Я бы предложил вместо этого быть явным, используя -std=c++98
, но это должно быть по умолчанию для g++ -ansi
так что не особо отличается.
Но, как правило, я никогда не видел ничего, что могло бы быть принято более новым gcc и отклонено более старым gcc на основании его недействительности. Я подозреваю, что любая такая проблема — ошибка в более старом компиляторе или его стандартной библиотеке. Gcc не имеет предупреждений о правильных вещах, но не работал со старыми версиями, поэтому у вас нет другого выбора, кроме как проверить более старую версию.
Что касается конкретных вопросов, которые вы упоминаете:
-Wconversion
должно помочь-Wno-sign-compare
,Компилятор не должен печатать предупреждения для заголовков, найденных в каталогах, указанных с -isystem
вместо -I
, так что это должно позволить вам отключить предупреждение для заголовков Qt и оставить его включенным для вашего собственного кода. Таким образом, вы должны быть в состоянии использовать -Wconversion
,
использование корпия или же какой-то другой инструмент статического анализа проверить код, помимо компилятора. В моем дистрибутиве Linux, apt-get install splint
получите лубок, возможно, проверьте, был ли он упакован для вашей ОС, для легкой установки.