<QtCompilerDetection> - Compiler-specific Macro Definitions
Die Header-Datei <QtCompilerDetection> enthält verschiedene compilerspezifische Makros. Mehr...
| Header: | #include <QtCompilerDetection> |
Makros
| 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.9) | Q_CONSTEXPR_DTOR |
(since 6.4) | Q_CONSTINIT |
(since 6.9) | Q_DECL_CONSTEXPR_DTOR |
(since 6.9) | Q_DECL_EQ_DELETE_X(reason) |
| Q_DECL_EXPORT | |
| Q_DECL_IMPORT | |
(since 6.12) | Q_DECL_NONALLOCATING_FUNCTION |
(since 6.12) | Q_DECL_NONBLOCKING_FUNCTION |
| void | Q_FALLTHROUGH() |
| const char * | Q_FUNC_INFO |
| Q_LIKELY(expr) | |
(since 6.9) | Q_LIKELY_BRANCH |
(since 6.6) | Q_NODISCARD_CTOR |
(since 6.7) | Q_NODISCARD_CTOR_X(message) |
(since 6.7) | |
(since 6.7) | Q_NODISCARD_X(message) |
| Q_UNLIKELY(expr) | |
(since 6.9) | Q_UNLIKELY_BRANCH |
Ausführliche Beschreibung
Die Header-Datei <QtCompilerDetection> stellt eine Reihe von Makros (Q_CC_*) bereit, die definiert sind, wenn die Anwendung mit dem angegebenen Compiler kompiliert wird. Beispielsweise ist das Makro „ Q_CC_SUN “ definiert, wenn die Anwendung mit Forte Developer oder Sun Studio C++ kompiliert wird.
Der Zweck dieser Makros besteht darin, Programmierern die Möglichkeit zu geben, kompilatorspezifischen Code in ihre Anwendung einzufügen.
Makro-Dokumentation
Q_CC_BOR
Ist definiert, wenn die Anwendung mit Borland/Turbo C++ kompiliert wird.
Q_CC_CDS
Ist definiert, wenn die Anwendung mit Reliant C++ kompiliert wird.
Q_CC_CLANG
Wird definiert, wenn die Anwendung mit Clang kompiliert wird.
Q_CC_COMEAU
Ist definiert, wenn die Anwendung mit Comeau C++ kompiliert wird.
Q_CC_DEC
Ist definiert, wenn die Anwendung mit DEC C++ kompiliert wird.
Q_CC_EDG
Ist definiert, wenn die Anwendung mit Edison Design Group C++ kompiliert wird.
Q_CC_GHS
Ist definiert, wenn die Anwendung mit den Green Hills Optimizing C++-Compilern kompiliert wird.
Q_CC_GNU
Ist definiert, wenn die Anwendung mit der GNU Compiler Collection (GCC) kompiliert wird.
Q_CC_HIGHC
Ist definiert, wenn die Anwendung mit MetaWare High C/C++ kompiliert wird.
Q_CC_HPACC
Ist definiert, wenn die Anwendung mit HP aC++ kompiliert wird.
Q_CC_KAI
Ist definiert, wenn die Anwendung mit KAI C++ kompiliert wird.
Q_CC_MIPS
Ist definiert, wenn die Anwendung mit MIPSpro C++ kompiliert wird.
Q_CC_MSVC
Ist definiert, wenn die Anwendung mit Microsoft Visual C/C++ oder Intel C++ für Windows kompiliert wird.
Q_CC_OC
Ist definiert, wenn die Anwendung mit CenterLine C++ kompiliert wird.
Q_CC_PGI
Ist definiert, wenn die Anwendung mit Portland Group C++ kompiliert wird.
Q_CC_SUN
Wird definiert, wenn die Anwendung mit Forte Developer oder Sun Studio C++ kompiliert wird.
Q_CC_SYM
Wird definiert, wenn die Anwendung mit Digital Mars C/C++ (früher Symantec C++) kompiliert wird.
Q_CC_USLC
Wird definiert, wenn die Anwendung mit SCO OUDK und UDK kompiliert wird.
Q_CC_WAT
Ist definiert, wenn die Anwendung mit Watcom C++ kompiliert wird.
[since 6.9] Q_CONSTEXPR_DTOR
Wird auf Compilern, die C++20 unterstützen, zu „ constexpr “ erweitert, wobei „ __cpp_constexpr “ einen Wert größer oder gleich „ 201907L “ hat. Andernfalls wird es zu „ const “ erweitert.
Verwenden Sie dieses Makro, um eine Variable zu deklarieren, die in C++20 oder höher zur Kompilierungszeit erstellt werden kann.
Dieses Makro wurde in Qt 6.9 eingeführt.
Siehe auch „ Q_DECL_CONSTEXPR_DTOR “.
[since 6.4] Q_CONSTINIT
Erzwingt die Initialisierung mit Konstanten, sofern dies vom Compiler unterstützt wird.
Wenn der Compiler das C++20-Schlüsselwort „ constinit “, „ [[clang::require_constant_initialization]] “ von Clang oder „ __constinit “ von GCC unterstützt, wird dieses Makro zu dem ersten der verfügbaren Schlüsselwörter expandiert; andernfalls wird es nicht expandiert.
Als „ constinit “ markierte Variablen verursachen einen Kompilierungsfehler, wenn ihre Initialisierung zur Laufzeit erfolgen müsste.
Hinweis: Konstant initialisierte Variablen können dennoch Auswirkungen auf die Ladezeit haben, wenn sie eine nicht triviale Zerstörung aufweisen.
Für Konstanten können Sie seit C++11 „ constexpr “ verwenden, aber „ constexpr “ macht Variablen ebenfalls zu „ const “, während „ constinit “ eine konstante Initialisierung gewährleistet, die Variable jedoch nicht zu „ const “ macht:
| Schlüsselwort | Hinzugefügt | immutable | konstant initialisiert |
|---|---|---|---|
const | C++98 | ja | nicht erforderlich |
constexpr | C++11 | ja | erforderlich |
constinit | C++20 | nein | erforderlich |
Wenn Deklaration und Definition einer Q_CONSTINIT-Variablen getrennt sind, wird dieses Makro nur auf die Definition und nicht auf die Deklaration angewendet:
class C {
~~~~
static int count; // declaration, no Q_CONSTINIT here
};
~~~
Q_CONSTINIT int C::count = 0; // definitionDieses Makro wurde in Qt 6.4 eingeführt.
[since 6.9] Q_DECL_CONSTEXPR_DTOR
Wird auf Compilern, die C++20 unterstützen, zu „ constexpr “ erweitert, wobei „ __cpp_constexpr “ einen Wert größer oder gleich „ 201907L “ hat. Andernfalls wird es zu „ inline “ erweitert.
Verwenden Sie dieses Makro, um einen Destruktor zu deklarieren, der in C++20 oder höher zur Kompilierungszeit berechnet werden kann.
Dieses Makro wurde in Qt 6.9 eingeführt.
Siehe auch Q_CONSTEXPR_DTOR.
[since 6.9] Q_DECL_EQ_DELETE_X(reason)
Wird auf Compilern, die C++26 unterstützen, zu „ = delete(reason) “ erweitert, sofern der Wert von „ __cpp_deleted_function “ größer oder gleich „ 202403L “ ist. Andernfalls wird es zu „ = delete “ erweitert.
Verwenden Sie dieses Makro, um eine gelöschte Funktion zu deklarieren und dem Benutzer im Falle einer Verwendung der Funktion eine Fehlermeldung ( reason) bereitzustellen (in der erklärt wird, warum die Funktion gelöscht wurde).
Dieses Makro wurde in Qt 6.9 eingeführt.
Q_DECL_EXPORT
Dieses Makro kennzeichnet ein Symbol für den Export in eine gemeinsam genutzte Bibliothek (siehe „Erstellen gemeinsam genutzter Bibliotheken“).
Siehe auch „ Q_DECL_IMPORT “.
Q_DECL_IMPORT
Dieses Makro deklariert ein Symbol als Import aus einer gemeinsam genutzten Bibliothek (siehe „Erstellen gemeinsam genutzter Bibliotheken“).
Siehe auch „ Q_DECL_EXPORT “.
[since 6.12] Q_DECL_NONALLOCATING_FUNCTION
Wird bei Clang-Compilern, die diese Funktion unterstützen, zu „ [[clang::nonallocating]] “ erweitert.
Gibt an, dass die Funktion niemals Speicher auf dem Heap zuweist oder eine Ausnahme auslöst.
Wird von Clangs „Function Effect Analysis “ und „Realtime Sanitizer“ verwendet.
Dieses Makro wurde in Qt 6.12 eingeführt.
Siehe auch „ Q_DECL_NONBLOCKING_FUNCTION “.
[since 6.12] Q_DECL_NONBLOCKING_FUNCTION
Wird auf Clang-Compilern, die diese Funktion unterstützen, zu „ [[clang::nonblocking]] “ erweitert.
Gibt an, dass die Funktion niemals an einer Sperre hängen bleibt, Speicher auf dem Heap zuweist oder eine Ausnahme auslöst.
Wird von Clangs „Function Effect Analysis “ und „Realtime Sanitizer“ verwendet.
Dieses Makro wurde in Qt 6.12 eingeführt.
Siehe auch „ Q_DECL_NONALLOCATING_FUNCTION “.
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 manche Compiler so konfiguriert werden können, dass sie Warnungen ausgeben, wenn keine gefunden wird.
Siehe auch Q_UNREACHABLE() und Q_UNREACHABLE_RETURN().
const char *Q_FUNC_INFO
Wird zu einer Zeichenkette erweitert, die die Funktion beschreibt, in der sich das Makro befindet. Wie diese Zeichenkette im Einzelnen aussieht, hängt vom Compiler ab. Bei GNU GCC handelt es sich in der Regel um die Funktionssignatur, während es bei anderen Compilern die Zeilen- und Spaltennummer sein kann.
Q_FUNC_INFO lässt sich bequem mit ` qDebug()` verwenden. 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;
}wird bei Instanziierung mit dem Typ „integer“ vom GCC-Compiler wie folgt ausgegeben:
const TInputType& myMin(const TInputType&, const TInputType&) [with TInputType = int] was called with value1: 3 value2: 4
Wird dieses Makro außerhalb einer Funktion verwendet, 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(), Q_LIKELY_BRANCH und Q_UNLIKELY_BRANCH.
[since 6.9] Q_LIKELY_BRANCH
Weist den Compiler darauf hin, dass der folgende Block wahrscheinlich ausgeführt wird.
Die Verwendung dieses Makros kann dem Compiler helfen, den Code zu optimieren.
Es ist als C++20-Attribut „ [[likely]] “ definiert und hat bei Compilern, die es nicht unterstützen, keine Auswirkung.
Dieses Makro wurde in Qt 6.9 eingeführt.
Siehe auch „ Q_LIKELY()“, „ Q_UNLIKELY()“ und „ Q_UNLIKELY_BRANCH “.
[since 6.6] Q_NODISCARD_CTOR
Wird bei Compilern, die dies bei Konstruktoren zulassen, zu „ [[nodiscard]] “ erweitert.
Andernfalls erfolgt keine Erweiterung.
Als `Q_NODISCARD_CTOR` markierte Konstruktoren lösen eine Compiler-Warnung aus, wenn an einer Aufrufstelle das resultierende Objekt nicht verwendet wird.
Dieses Makro dient ausschließlich dazu, Warnungen bei Compilern zu vermeiden, die diese Funktion nicht implementieren. Wenn alle von Ihnen unterstützten Plattformen „ [[nodiscard]] “ für Konstruktoren zulassen, empfehlen wir Ihnen 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 “.
Erweitern Sie auf „ [[nodiscard(message)]] “ bei Compilern, die diese Funktion unterstützen.
Andernfalls werden sie jeweils zu „ [[nodiscard]] “ und „ Q_NODISCARD_CTOR “ erweitert.
Diese Makros wurden in Qt 6.7 eingeführt.
Siehe auch Q_NODISCARD_CTOR.
Q_UNLIKELY(expr)
Weist den Compiler darauf hin, dass die eingeschlossene Bedingung „ expr “ wahrscheinlich zu „ false “ ausgewertet wird.
Die Verwendung dieses Makros kann dem Compiler helfen, den Code zu optimieren.
Beispiel:
bool readConfiguration(const QFile&file)
{
// Wir gehen davon aus, 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(), Q_LIKELY_BRANCH und Q_UNLIKELY_BRANCH.
[since 6.9] Q_UNLIKELY_BRANCH
Weist den Compiler darauf hin, dass der folgende Block wahrscheinlich nicht ausgeführt wird.
Die Verwendung dieses Makros kann dem Compiler helfen, den Code zu optimieren.
Es ist als das C++20-Attribut „ [[unlikely]] “ definiert und hat bei Compilern, die es nicht unterstützen, keine Auswirkung.
Dieses Makro wurde in Qt 6.9 eingeführt.
Siehe auch Q_LIKELY(), Q_UNLIKELY() und Q_LIKELY_BRANCH.
© 2026 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.