使用g ++(通过qmake生成的Makefile)使用该行进行编译
#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)
和叮当声(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。任何建议(用法不正确?)表示赞赏。
答案 0 :(得分:0)
我认为您不应该专注于该宏。该宏的目的是在QT_FEATURE_printer为零时简单地使您的编译代码崩溃。该代码并非旨在用于其他目的。
不是有条件地使用宏,而是尝试找出为什么QT_FEATURE_printer为零,并包含/配置依赖项来更改它(它似乎在printsupport / qtprintsupport-config.h中定义)。
答案 1 :(得分:0)
如果您使用新功能将qt源更新为某些内容,而没有再次运行configure,则会发生这种情况。在运行时,配置新功能。
答案 2 :(得分:0)
此问题已在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>