<QtAssert>
Macros pour la vérification des conditions pendant le développement et le débogage. Plus d'informations...
| 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.
Ceci peut être utilisé comme une version en ligne de Q_CHECK_PTR.
Documentation sur les macros
void Q_ASSERT(bool test)
Imprime un message d'avertissement contenant le nom du fichier du code source et le numéro de ligne si test est false.
Q_ASSERT() est utile pour tester les pré et post-conditions pendant le développement. Elle 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(b != 0); return a / b; }
Si b est égal à zéro, l'instruction Q_ASSERT produira le message suivant à l'aide de la fonction qFatal() :
ASSERT: "b != 0" in file div.cpp, line 7
Voir également Q_ASSERT_X(), qFatal() et Techniques de débogage.
void Q_ASSERT_X(bool test, const char *where, const char *what)
Imprime le message what avec l'emplacement where, le nom du fichier source et le numéro de ligne si test est false.
Q_ASSERT_X est utile pour tester les pré et 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 produira le message suivant à l'aide de la fonction qFatal() :
ASSERT failure in divide: "division by zero", file div.cpp, line 7
Voir également Q_ASSERT(), qFatal() et Techniques de débogage.
void Q_CHECK_PTR(void *pointer)
Si pointer est nullptr, il imprime un message contenant le nom du fichier du code source et le numéro de ligne, indiquant que le programme a manqué de mémoire et abandonne l'exécution du programme. Il lance std::bad_alloc à la place si les exceptions sont activées.
Q_CHECK_PTR ne fait rien si QT_NO_DEBUG et QT_NO_EXCEPTIONS ont été définis lors de la compilation. Par conséquent, vous ne devez pas utiliser Q_CHECK_PTR pour vérifier les allocations de mémoire réussies, 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)
Le compilateur suppose que expr est true.
Cette macro émet 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 aussi 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, et qu'il peut donc optimiser tous les chemins de code menant à ce point comme du code mort, ainsi que le code continuant à partir de ce point.
Cette macro est utile pour marquer des conditions impossibles. Par exemple, étant donné l'énumération suivante :
enum Shapes { Rectangle, Triangle, Circle, NumShapes };
On peut écrire une table de commutation 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() à ce stade est de dire au compilateur de ne pas générer de code pour une variable de forme contenant cette valeur. Si la macro est manquante, le compilateur générera quand même les comparaisons nécessaires pour cette valeur. Si l'étiquette de cas était supprimée, certains compilateurs pourraient produire un avertissement indiquant que certaines valeurs d'énumération n'ont pas été vérifiées.
L'utilisation de cette macro dans des conditions impossibles permet d'améliorer la couverture du code en éliminant les chemins de code morts.
Dans les versions de débogage, la condition est renforcée par un assert pour faciliter le débogage.
Remarque : utilisez la macro Q_UNREACHABLE_RETURN() pour insérer des instructions de retour pour les compilateurs qui en ont besoin, sans provoquer d'avertissements pour les compilateurs qui se plaignent de leur présence.
Voir aussi Q_ASSERT(), qFatal(), Q_UNREACHABLE_RETURN() et Q_PRESUME().
[since 6.5] void Q_UNREACHABLE_RETURN(...)
Ceci est équivalent à
Q_UNREACHABLE();
return __VA_ARGS__;sauf qu'elle omet le retour sur les compilateurs qui en seraient avertis.
Cette macro a été introduite dans Qt 6.5.
Voir aussi 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.