<QtAssert>
Macros permettant de vérifier des conditions pendant le développement et le débogage. En savoir plus…
| Header: | #include <QtAssert> |
Fonctions
| T * | q_check_ptr(T *p) |
Macros
| void | Q_ASSERT(bool test) |
| void | Q_ASSERT_X(bool test, const char *where, const char *what) |
| void | Q_CHECK_PTR(void *pointer) |
(since 6.11) void | Q_PRESUME(bool expr) |
| void | Q_UNREACHABLE() |
(since 6.5) void | Q_UNREACHABLE_RETURN(...) |
Documentation des fonctions
template <typename T> T *q_check_ptr(T *p)
Utilise Q_CHECK_PTR sur p, puis renvoie p.
Cette fonction peut être utilisée comme une version intégrée de Q_CHECK_PTR.
Documentation des macros
void Q_ASSERT(bool test)
Affiche un message d'avertissement contenant le nom du fichier de code source et le numéro de ligne si test est défini false.
Q_ASSERT() est utile pour tester les pré-conditions et les post-conditions pendant le développement. Elle ne fait rien si QT_NO_DEBUG a été définie lors de la compilation.
Exemple :
// File: div.cpp
#include <QtGlobal>
int divide(int a, int b)
{
Q_ASSERT(b != 0);
return a / b;
}Si b est égal à zéro, l'instruction Q_ASSERT affichera le message suivant à l'aide de la fonction qFatal() :
ASSERT: "b != 0" in file div.cpp, line 7Voir également Q_ASSERT_X(), qFatal() et Techniques de débogage.
void Q_ASSERT_X(bool test, const char *where, const char *what)
Affiche le message « what » ainsi que l'emplacement « where », le nom du fichier source et le numéro de ligne si « test » est défini comme « false ».
Q_ASSERT_X est utile pour tester les pré-conditions et les post-conditions pendant le développement. Il ne fait rien si QT_NO_DEBUG a été défini lors de la compilation.
Exemple :
// File: div.cpp
#include <QtGlobal>
int divide(int a, int b)
{
Q_ASSERT_X(b != 0, "divide", "division by zero");
return a / b;
}Si b est égal à zéro, l'instruction Q_ASSERT_X affichera le message suivant à l'aide de la fonction qFatal() :
ASSERT failure in divide: "division by zero", file div.cpp, line 7Voir également Q_ASSERT(), qFatal() et Techniques de débogage.
void Q_CHECK_PTR(void *pointer)
Si pointer vaut nullptr, une message contenant le nom du fichier source et le numéro de ligne s'affiche, indiquant que le programme a manqué de mémoire et interrompt son exécution. Si les exceptions sont activées, une exception de type « std::bad_alloc » est levée à la place.
Q_CHECK_PTR ne fait rien si QT_NO_DEBUG et QT_NO_EXCEPTIONS ont été définis lors de la compilation. Vous ne devez donc pas utiliser Q_CHECK_PTR pour vérifier si les allocations de mémoire ont réussi, car la vérification sera désactivée dans certains cas.
Exemple :
int *a;
Q_CHECK_PTR(a = new int[80]); // WRONG!
a = new (std::nothrow) int[80]; // Right
Q_CHECK_PTR(a);Voir également qWarning() et Techniques de débogage.
[since 6.11] void Q_PRESUME(bool expr)
Indique au compilateur de considérer que ` expr ` est un ` true`.
Cette macro génère Q_ASSERT() et un attribut [[assume]] de style C++23 lorsque le compilateur le prend en charge. Sinon, elle revient à Q_ASSERT().
Cette macro a été introduite dans Qt 6.11.
Voir également Q_ASSERT(), Q_UNREACHABLE(), Q_LIKELY() et Q_ASSUME().
void Q_UNREACHABLE()
Indique au compilateur que le point actuel ne peut être atteint par aucune exécution ; il peut donc optimiser les chemins de code menant à cet endroit en les traitant comme du code mort, ainsi que le code qui se poursuit à partir de là.
Cette macro est utile pour signaler des conditions impossibles. Par exemple, considérons l'énumération suivante :
enum Shapes {
Rectangle,
Triangle,
Circle,
NumShapes
};On peut écrire une table switch comme suit :
switch (shape) {
case Rectangle:
return rectangle();
case Triangle:
return triangle();
case Circle:
return circle();
case NumShapes:
Q_UNREACHABLE();
break;
}L’avantage d’insérer Q_UNREACHABLE() à cet endroit est que le compilateur est informé de ne pas générer de code pour une variable de type « shape » contenant cette valeur. Si la macro est absente, le compilateur générera tout de même les comparaisons nécessaires pour cette valeur. Si l’étiquette de cas était supprimée, certains compilateurs pourraient générer un avertissement indiquant que certaines valeurs de l’énumération n’ont pas été vérifiées.
L’utilisation de cette macro dans les conditions impossibles permet d’améliorer la couverture de code, car les chemins de code morts peuvent être éliminés.
Dans les versions de débogage, la condition est imposée par un assert afin de faciliter le débogage.
Remarque : utilisez la macro Q_UNREACHABLE_RETURN() pour insérer des instructions return pour les compilateurs qui en ont besoin, sans provoquer d’avertissements pour les compilateurs qui signalent sa présence.
Voir également Q_ASSERT(), qFatal(), Q_UNREACHABLE_RETURN() et Q_PRESUME().
[since 6.5] void Q_UNREACHABLE_RETURN(...)
Cela revient à
Q_UNREACHABLE();
return __VA_ARGS__;sauf qu'il omet le retour sur les compilateurs qui émettraient un avertissement à ce sujet.
Cette macro a été introduite dans Qt 6.5.
Voir également Q_UNREACHABLE() et Q_PRESUME().
© 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.