Предложение уровня предупреждения QT
какой уровень предупреждения вы используете при компиляции проектов QT?
когда я скомпилирован с W4, я получаю много предупреждений, таких как:
C4127: conditional expression is constant
должен ли я компилироваться в W3 или найти другие способы обработки предупреждений в W4, такие как: добавление нового файла заголовка и использование pragma(упомянутые здесь стандарты кодирования C++: 101 правила, рекомендации и рекомендации).
каковы ваши практики?
спасибо.
5 ответов
я столкнулся с той же самой проблемой, что и у вас пару лет назад, что и установка компилятора на уровень 4 предупреждений, чтобы поймать как можно больше проблем. В то время у меня был контракт поддержки с Qt и я спросил их, почему их код генерирует так много предупреждений. Их ответом было то, что они никогда не знали, что их код будет компилироваться без каких-либо предупреждений. Только что их код будет работать правильно.
после нескольких попыток я начал окружать заголовок Qt файлы с прагмы, чтобы отключить предупреждения, как показано ниже
#pragma warning(push,3) // drop compiler to level 3 and save current level
#include <QString>
#include <QVariant>
#include <QStack>
#include <QLabel>
#include <QtGui/QTableWidget>
#pragma warning(pop) // restore compiler warning level
делая это таким образом, вы компилируете только заголовочные файлы Qt на более низком уровне предупреждения. Или любой уровень, чтобы избавиться от предупреждений. У вас могут быть отдельные предупреждения, которые все еще отображаются, поэтому вы можете повысить уровень предупреждения или отключить отдельные предупреждения с помощью
#pragma warning(disable: 4700)
некоторые файлы библиотеки Boost также имеют эту проблему.
лично я просто использую файлы Makefile, которые qmake генерирует по умолчанию... исходя из предположения, что я могу доверять ребятам из Nokia, чтобы они генерировали файлы Makefile, которые делают правильную вещь для текущей среды сборки.
Я вижу, что qmake примет некоторые необязательные аргументы относительно предупреждений, хотя:
The level of warning information can be fine-tuned to help you find problems in your project file:
-Wall
qmake will report all known warnings.
-Wnone
No warning information will be generated by qmake.
-Wparser
qmake will only generate parser warnings. This will alert you to common pitfalls and potential problems in the parsing of your project files.
-Wlogic
qmake will warn of common pitfalls and potential problems in your project file. For example, qmake will report whether a file is placed into a list of files multiple times, or if a file cannot be found.
использовать CONFIG += warn_on
в своем .
посмотреть документация.
опции
warn_on The compiler should output as many warnings as possible. This is ignored if warn_off is specified. warn_off The compiler should output as few warnings as possible.
Если вы боретесь с Q_ASSERT в Visual studio, все эти предупреждения push / pop не будут работать, так как макросы "создаются" на месте, далеко позади заголовков. Поэтому я бы предложил переопределить Q_ASSERT:
#ifdef NDEBUG
#undef Q_ASSERT
#define Q_ASSERT(x) __noop
#endif
на основе user2846246ответ, я обнаружил, что добавление следующего в начале компиляции любой библиотеки, использующей Qt, сделало трюк (в моем случае эта библиотека использует предварительно скомпилированный файл заголовка в Visual Studio, поэтому я просто добавил код в этот файл заголовка):
#ifndef _DEBUG
#undef Q_ASSERT
#define Q_ASSERT(x) __noop
#undef Q_ASSERT_X
#define Q_ASSERT_X(cond, where, what) __noop
#endif
что здорово, поскольку мне не нравится сбрасывать уровень предупреждения всей библиотеки.