QT предупреждение уровня предложения - PullRequest
6 голосов
/ 30 апреля 2010

Какой уровень предупреждения вы используете при компиляции проектов QT?

Когда я скомпилировал с W4, я получаю много предупреждений, таких как:

C4127: conditional expression is constant

Должен ли я скомпилировать на W3 или найти другие способы обработки предупреждений на W4, такие как: добавление нового заголовочного файла и использование прагм (упомянутые здесь Стандарты кодирования C ++: 101 правила, руководящие указания и рекомендации).

Какие у вас практики?

Спасибо.

Ответы [ 5 ]

11 голосов
/ 30 апреля 2010

Я столкнулся с той же самой проблемой, с которой вы столкнулись пару лет назад, - установкой компилятором предупреждений 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 также имеют эту проблему.

4 голосов
/ 30 апреля 2010

Лично я просто использую файлы 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.
1 голос
/ 05 мая 2016

Если вы боретесь с Q_ASSERT в Visual studio, все эти предупреждающие push / pop вещи не будут работать, так как макросы «создаются» на месте, далеко позади ваших заголовков. Поэтому я бы предложил переопределить Q_ASSERT:

#ifdef NDEBUG
#undef Q_ASSERT
#define Q_ASSERT(x) __noop
#endif
1 голос
/ 26 июня 2014

Используйте CONFIG += warn_on в вашем файле .pro.

См. документацию .

Опция

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.
0 голосов
/ 08 ноября 2017

Основываясь на ответе 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

Это здорово, так как мне не нравится понижать уровень предупреждения всей библиотеки.

...