Деление препроцессора на ноль при оценке `QT_CONFIG (printer)` - PullRequest
0 голосов
/ 24 апреля 2019

Компиляция с g ++ (из Makefile, сгенерированного с помощью qmake) с использованием строки

#if !QT_CONFIG(printer)
    // do something
#endif

дает ошибку препроцессора как для g ++ (7.3.0)

test.cpp:25:6: error: division by zero in #if
 #if !QT_CONFIG(printer)

, так и для clang (6.00)

test.cpp:25:6: error: division by zero in preprocessor expression
#if !QT_CONFIG(printer)
     ^~~~~~~~~~~~~~~~~~
/usr/include/x86_64-linux-gnu/qt5/QtCore/qglobal.h:84:30: note: expanded from macro 'QT_CONFIG'
#define QT_CONFIG(feature) (1/QT_FEATURE_##feature == 1)
                            ~^~~~~~~~~~~~~~~~~~~~~
1 error generated.

, где clang ++ дает более подробный вывод.printer не включен, поэтому макрос рекомендуется выполнять условной компиляцией.Версия QT 5.9.5.Любые предложения (неправильное использование?) Приветствуются.

Ответы [ 3 ]

0 голосов
/ 24 апреля 2019

Это то, что происходит, если вы обновили свои источники qt до чего-то, используя новую функцию, без повторного запуска configure. При запуске configure устанавливаются новые функции.

0 голосов
/ 14 июня 2019

Это исправлено в Qt 5.12.3.Начинается новая версия notepad.cpp:

#include <QFile>
#include <QFileDialog>
#include <QTextStream>
#include <QMessageBox>
#if defined(QT_PRINTSUPPORT_LIB)
#include <QtPrintSupport/qtprintsupportglobal.h>
#if QT_CONFIG(printer)
#if QT_CONFIG(printdialog)
#include <QPrintDialog>
#endif // QT_CONFIG(printdialog)
#include <QPrinter>   
#endif // QT_CONFIG(printer)
#endif // QT_PRINTSUPPORT_LIB
#include <QFont>
#include <QFontDialog>
0 голосов
/ 24 апреля 2019

Я не думаю, что вы должны сосредоточиться на этом макросе.Смысл этого макроса заключается в простом сбое кода компиляции, когда QT_FEATURE_printer равен нулю.Код не предназначен для работы в противном случае.

Вместо условного использования макроса попытайтесь выяснить, почему QT_FEATURE_printer равен нулю, и включите / сконфигурируйте зависимости, чтобы изменить это (кажется, что они определены в printsupport / qtprintsupport-config.ч).

...