вступление
Некоторое время назад я обнаружил, что педантичные ключи GCC полезны и могут посоветовать мне написать более понятный код.
Когда я кодирую простое консольное приложение C ++ и компилирую его с параметрами:
-Wall -Wextra -pedantic -Weffc++ -Wold-style-cast
-Wconversion -Winit-self -Wunreachable-code
(вот полностью документированная информация обо всех них: Варианты запроса или подавления предупреждений, Параметры управления диалектом C ++)
проблема
Теперь я использую Qt 4.8.4 с компилятором MinGW для сборки приложений.
Проблема в том, что когда я добавляю в свой .pro
-файл следующих строк:
QMAKE_CXXFLAGS += -Wall -Wextra -pedantic -Weffc++ -Wold-style-cast
QMAKE_CXXFLAGS += -Wconversion -Winit-self
Я получил много предупреждений о том, что делает из источников Qt, но не из моих источников.
пример
Простой Qt GUI проект с параметрами, написанными выше в .pro
-file выдает 517 предупреждений, таких как:
D: \ Qt \ 4.8.4 \ src \ corelib \ global \ qglobal.h: 981: предупреждение: базовый класс ‘struct QIntegerForSize<4> ‘имеет не виртуальный деструктор [-Weffc ++]
D: \ Qt \ 4.8.4 \ src \ corelib \ tools \ qpoint.h: 174: предупреждение: преобразование в ‘float’ из ‘int’ может изменить его значение [-Wconversion]
…
И так далее.
Вопрос
Как избежать применения педантичных параметров к источникам Qt и использовать эти параметры только в моем коде?
Если вы пометите их как системные заголовки, используя GCC -isystem
флаг, вы не увидите предупреждений. (Смотрите также http://gcc.gnu.org/onlinedocs/cpp/System-Headers.html).
Других решений пока нет …