<QtCompilerDetection> - Compiler-specific Macro Definitions

Die <QtCompilerDetection> Header-Datei enthält verschiedene compilerspezifische Makros. Mehr...

Header: #include <QtCompilerDetection>

Makros

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

[since 6.7] Q_NODISCARD_CTOR_X(message)

[since 6.7] Q_NODISCARD_X(message)

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üsselworthinzugefügtunveränderlichKonstant-initialisiert
constC++98janicht erforderlich
constexprC++11jaerforderlich
constinitC++20neinerforderlich

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.