<QtCompilerDetection> - Compiler-specific Macro Definitions
Die <QtCompilerDetection> Header-Datei enthält verschiedene compilerspezifische Makros. Mehr...
Header: | #include <QtCompilerDetection> |
Makros
(since 6.7) | |
Q_CC_BOR | |
Q_CC_CDS | |
Q_CC_CLANG | |
Q_CC_COMEAU | |
Q_CC_DEC | |
Q_CC_EDG | |
Q_CC_GHS | |
Q_CC_GNU | |
Q_CC_HIGHC | |
Q_CC_HPACC | |
Q_CC_KAI | |
Q_CC_MIPS | |
Q_CC_MSVC | |
Q_CC_OC | |
Q_CC_PGI | |
Q_CC_SUN | |
Q_CC_SYM | |
Q_CC_USLC | |
Q_CC_WAT | |
(since 6.4) | Q_CONSTINIT |
Q_DECL_EXPORT | |
Q_DECL_IMPORT | |
void | Q_FALLTHROUGH |
const char* | Q_FUNC_INFO |
Q_LIKELY(expr) | |
(since 6.6) | Q_NODISCARD_CTOR |
(since 6.7) | Q_NODISCARD_CTOR_X(message) |
(since 6.7) | Q_NODISCARD_X(message) |
Q_UNLIKELY(expr) |
Detaillierte Beschreibung
Die <QtCompilerDetection> Header-Datei bietet eine Reihe von Makros (Q_CC_*), die definiert sind, wenn die Anwendung mit dem angegebenen Compiler kompiliert wurde. Zum Beispiel ist das Q_CC_SUN Makro definiert, wenn die Anwendung mit Forte Developer oder Sun Studio C++ kompiliert wurde.
Der Zweck dieser Makros ist es, dem Programmierer die Möglichkeit zu geben, compilerspezifischen Code zu seiner Anwendung hinzuzufügen.
Makro-Dokumentation
Erweitert zu [[nodiscard(message)]]
auf Compilern, die diese Funktion unterstützen.
Andernfalls werden sie zu [[nodiscard]]
bzw. Q_NODISCARD_CTOR erweitert.
Diese Funktion wurde in Qt 6.7 eingeführt.
Siehe auch Q_NODISCARD_CTOR.
Q_CC_BOR
Definiert, wenn die Anwendung mit Borland/Turbo C++ kompiliert wurde.
Q_CC_CDS
Definiert, wenn die Anwendung mit Reliant C++ kompiliert wurde.
Q_CC_CLANG
Definiert, wenn die Anwendung mit Clang kompiliert wird.
Q_CC_COMEAU
Definiert, wenn die Anwendung mit Comeau C++ kompiliert wurde.
Q_CC_DEC
Definiert, wenn die Anwendung mit DEC C++ kompiliert wurde.
Q_CC_EDG
Definiert, wenn die Anwendung mit Edison Design Group C++ kompiliert wurde.
Q_CC_GHS
Definiert, wenn die Anwendung mit Green Hills Optimizing C++ Compilern kompiliert wurde.
Q_CC_GNU
Definiert, wenn die Anwendung mit der GNU Compiler Collection (GCC) kompiliert wurde.
Q_CC_HIGHC
Definiert, wenn die Anwendung mit MetaWare High C/C++ kompiliert wurde.
Q_CC_HPACC
Definiert, wenn die Anwendung mit HP aC++ kompiliert wurde.
Q_CC_KAI
Definiert, wenn die Anwendung mit KAI C++ kompiliert wurde.
Q_CC_MIPS
Definiert, wenn die Anwendung mit MIPSpro C++ kompiliert wurde.
Q_CC_MSVC
Definiert, wenn die Anwendung mit Microsoft Visual C/C++, Intel C++ für Windows kompiliert wurde.
Q_CC_OC
Definiert, wenn die Anwendung mit CenterLine C++ kompiliert wurde.
Q_CC_PGI
Definiert, wenn die Anwendung mit Portland Group C++ kompiliert wurde.
Q_CC_SUN
Definiert, ob die Anwendung mit Forte Developer oder Sun Studio C++ kompiliert wurde.
Q_CC_SYM
Definiert, wenn die Anwendung mit Digital Mars C/C++ (früher Symantec C++) kompiliert wurde.
Q_CC_USLC
Definiert, wenn die Anwendung mit SCO OUDK und UDK kompiliert wird.
Q_CC_WAT
Definiert, wenn die Anwendung mit Watcom C++ kompiliert wurde.
[since 6.4]
Q_CONSTINIT
Erzwingt die Initialisierung von Konstanten, wenn dies vom Compiler unterstützt wird.
Wenn der Compiler das C++20-Schlüsselwort constinit
, Clang's [[clang::require_constant_initialization]]
oder GCC's __constinit
unterstützt, dann expandiert dieses Makro zum ersten dieser Schlüsselwörter, das verfügbar ist, andernfalls expandiert es zu nichts.
Variablen, die als constinit
markiert sind, verursachen einen Kompilierfehler, wenn ihre Initialisierung zur Laufzeit durchgeführt werden müsste.
Hinweis: Konstant-initialisierte Variablen können immer noch Auswirkungen auf die Ladezeit haben, wenn sie eine nicht-triviale Zerstörung haben.
Für Konstanten können Sie seit C++11 constexpr
verwenden, aber constexpr
macht auch Variablen const
, während constinit
die Initialisierung der Konstanten sicherstellt, aber die Variable nicht const
macht:
Schlüsselwort | hinzugefügt | unveränderlich | Konstant-initialisiert |
---|---|---|---|
const | C++98 | ja | nicht erforderlich |
constexpr | C++11 | ja | erforderlich |
constinit | C++20 | nein | erforderlich |
Dieses Makro wurde in Qt 6.4 eingeführt.
Q_DECL_EXPORT
Dieses Makro markiert ein Symbol für den Export von Shared Libraries (siehe Erstellen von Shared Libraries).
Siehe auch Q_DECL_IMPORT.
Q_DECL_IMPORT
Dieses Makro deklariert ein Symbol als Import aus einer Shared Library (siehe Erstellen von Shared Libraries).
Siehe auch Q_DECL_EXPORT.
void Q_FALLTHROUGH
Kann in switch-Anweisungen am Ende eines case-Blocks verwendet werden, um dem Compiler und anderen Entwicklern mitzuteilen, dass das Fehlen einer break-Anweisung beabsichtigt ist.
Dies ist nützlich, da eine fehlende Break-Anweisung oft ein Fehler ist und einige Compiler so konfiguriert werden können, dass sie Warnungen ausgeben, wenn eine solche nicht gefunden wird.
Siehe auch Q_UNREACHABLE() und Q_UNREACHABLE_RETURN().
const char*Q_FUNC_INFO
Erweitert sich zu einer Zeichenkette, die die Funktion beschreibt, in der sich das Makro befindet. Wie diese Zeichenkette im Einzelnen aussieht, hängt vom Compiler ab. Bei GNU GCC ist es normalerweise die Funktionssignatur, während es bei anderen Compilern die Zeilen- und Spaltennummer sein kann.
Q_FUNC_INFO kann bequem mit qDebug() verwendet werden. Zum Beispiel, diese Funktion:
template<typename TInputType>const TInputType &myMin(const TInputType &value1, const TInputType &value2){ qDebug() << Q_FUNC_INFO << "was called with value1:" << value1 << "value2:" << value2; if(wert1 < wert2) return wert1; else return wert2; }
wenn mit dem Integer-Typ instanziiert, wird mit dem GCC-Compiler erzeugt:
const TInputType& myMin(const TInputType&, const TInputType&) [with TInputType = int] was called with value1: 3 value2: 4
Wenn dieses Makro außerhalb einer Funktion verwendet wird, ist das Verhalten undefiniert.
Q_LIKELY(expr)
Weist den Compiler darauf hin, dass die eingeschlossene Bedingung, expr, wahrscheinlich zu true
ausgewertet wird.
Die Verwendung dieses Makros kann dem Compiler helfen, den Code zu optimieren.
Beispiel:
// the condition inside the "if" will be successful most of the times for (int i = 1; i <= 365; i++) { if (Q_LIKELY(isWorkingDay(i))) { ... } ... }
Siehe auch Q_UNLIKELY().
[since 6.6]
Q_NODISCARD_CTOR
Erweitert zu [[nodiscard]]
auf Compilern, die es auf Konstruktoren akzeptieren.
Andernfalls expandiert es zu nichts.
Konstruktoren, die als Q_NODISCARD_CTOR markiert sind, verursachen eine Compilerwarnung, wenn eine Aufrufsite das resultierende Objekt nicht verwendet.
Dieses Makro existiert nur, um Warnungen auf Compilern zu verhindern, die dieses Feature nicht implementieren. Wenn Ihre unterstützten Plattformen alle [[nodiscard]]
auf Konstruktoren erlauben, empfehlen wir dringend, das C++-Attribut direkt anstelle dieses Makros zu verwenden.
Dieses Makro wurde in Qt 6.6 eingeführt.
Siehe auch Q_NODISCARD_CTOR_X.
Q_UNLIKELY(expr)
Weist den Compiler darauf hin, dass die eingeschlossene Bedingung, expr, wahrscheinlich zu false
führt.
Die Verwendung dieses Makros kann dem Compiler helfen, den Code zu optimieren.
Beispiel:
bool readConfiguration(const QFile &file) { // Wir erwarten, dass wir aufgefordert werden, eine vorhandene Datei zu lesen if (Q_UNLIKELY(!file.exists())) { qWarning() << "File not found"; return false; } ... return true; }
Siehe auch Q_LIKELY().
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.