166 votes

Ajouter des messages personnalisés dans assert?

Existe-t-il un moyen d’ajouter ou de modifier le message envoyé par assert? J'aimerais utiliser quelque chose comme

 assert(a == b, "A must be equal to B");
 

Ensuite, le compilateur ajoute la ligne , le temps , etc.

C'est possible?

300voto

zneak Points 45458

Un hack que j'ai vu est d'utiliser l'opérateur && . Puisqu’un pointeur "est vrai" s’il n’est pas nul, vous pouvez procéder comme suit sans modifier la condition:

 assert(a == b && "A is not equal to B");
 

Puisque assert indique la condition qui a échoué, votre message s'affichera également. Si cela ne suffit pas, vous pouvez écrire votre propre fonction ou macro myAssert qui affichera tout ce que vous voulez.

72voto

bosonix Points 1104

Une autre option consiste à inverser les opérandes et à utiliser l'opérateur virgule. Vous avez besoin de parenthèses supplémentaires pour que la virgule ne soit pas traitée comme un séparateur entre les arguments:

 assert(("A must be equal to B", a == b));
 

(ceci a été copié des commentaires ci-dessus, pour une meilleure visibilité)

22voto

Zero Points 1223
 BOOST_ASSERT_MSG(expre, msg)
 

http://www.boost.org/doc/libs/1_51_0/libs/utility/assert.html

Vous pouvez utiliser cela directement ou copier le code de Boost. Notez également que l'assertion Boost est uniquement en-tête, vous pouvez donc récupérer ce fichier si vous ne souhaitez pas installer l'intégralité de Boost.

2voto

Merlyn Morgan-Graham Points 31815

assert est une combinaison macro / fonction. vous pouvez définir votre propre macro / fonction, en utilisant __FILE__ , __BASE_FILE__ , __LINE__ etc., avec votre propre fonction qui prend un message personnalisé

-7voto

Jichao Points 5680

Pour vc, ajoutez le code suivant dans assert.h,

 #define assert2(_Expression, _Msg) (void)( (!!(_Expression)) || (_wassert(_CRT_WIDE(#_Msg), _CRT_WIDE(__FILE__), __LINE__), 0) )
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X