Macro qui imprime une expression et évalue (avec __STRING)
-
22-08-2019 - |
Question
Pour l'apprentissage et la démonstration, je besoin d'une macro qui imprime son paramètre et l'évalue. Je pense qu'il est un cas très fréquent, peut-être même une FAQ mais je ne peux pas trouver des références réelles.
Mon code actuel est:
#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", __STRING(expr), (expr)))
et
PRINT(x & 0x01);
Il fonctionne très bien, mais je ne suis pas sûr du statut juridique de la macro __STRING, en particulier car il est dans l'espace privé __.
Alors, mes questions:
- Y at-il une meilleure façon d'écrire cette macro?
- est __STRING standard / grand / mal?
- Comment utiliser les outils de recherche existants pour trouver au sujet __STRING? Le moteur de recherche de SO recherche simplement quelque chose chaîne contenant: - (
La solution
Vous pouvez utiliser le jeton # préprocesseur qui convertit son argument RHS à une chaîne de caractères:
#include <stdlib.h>
#include <stdio.h>
#define STR(x) #x
#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", STR(expr), (expr)))
int main(void)
{
int x = 7;
PRINT(x & 0x01);
return EXIT_SUCCESS;
}
2) Il est certainement pas standard, ce qui est la première fois que je suis venu à travers elle; pas surprenant que cela ne semble pas faire beaucoup plus que dans un premier coup d'oeil la macro STR () ci-dessus,.
3) Google semble fonctionner très bien.
Autres conseils
Quelque chose comme
#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", #expr, (expr)))
est probablement ce que vous voulez. # Est l'opérateur de mise en chaîne.