58 votes

assert() avec message

J'ai vu quelque part assert utilisé avec un message de la manière suivante:

 assert(("message", condition));

Cela semble très bien fonctionner, sauf que gcc renvoie l'avertissement suivant :

 warning: left-hand operand of comma expression has no effect

Comment puis-je arrêter l'avertissement ?

96voto

pmg Points 52636

Utilisez -Wno-unused-value pour arrêter l'avertissement ; (l'option -Wall inclut -Wunused-value ).

Je pense qu'il est encore mieux d'utiliser une autre méthode, comme

 assert(condition && "message");

2voto

Arthur2e5 Points 362

Par tradition, (void) communique au compilateur que vous ignorez sciemment une expression :

 /* picard.c, TNG S6E11. */
#define assertmsg(x, msg) assert(((void) msg, x))
assertmsg(2+2==5, "There! are! four! lights!");

0voto

JiaHao Xu Points 756

Une fonction qui prend const char* et renvoie true éviterait probablement toutes sortes d'avertissements :

 #include <assert.h>

int always_true(const char *msg) {
    return 1;
}

#define assert_msg(expr, msg) assert((expr) && always_true(msg))

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