J'essaye d'instrument de code pour attraper et imprimer les messages d'erreur. Actuellement, je suis sur un somethng macro comme ceci:Utilisation et retour de la sortie dans la macro C
#define my_function(x) \
switch(function(x)) { \
case ERROR: \
fprintf(stderr, "Error!\n"); \
break; \
}
Normalement, je ne capture la sortie de fonction et cela fonctionne très bien. Mais j'ai trouvé quelques cas où j'ai aussi besoin de la valeur de retour de function()
. J'ai essayé quelque chose comme le suivant, mais cela produit une erreur de syntaxe.
#define my_function(x) \
do { \
int __err = function(x); \
switch(__err) { \
case ERROR: \
fprintf(stderr, "Error!\n"); \
break; \
} \
__err; \
} while(0)
je pouvais déclarer une variable globale pour maintenir la valeur de retour de la fonction, mais qui semble laid et mon programme est multithread, donc qui est susceptible de causer des problèmes. J'espère qu'il existe une meilleure solution.
Pourquoi ne pas en faire une fonction en ligne? – Job
La "sortie" d'une fonction n'est pas la même que la "valeur de retour" d'une fonction. Vous voulez la valeur de retour. –
Il manque plusieurs marqueurs de continuation de ligne à votre message. Cela peut être votre erreur de syntaxe. –