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:

  1. Y at-il une meilleure façon d'écrire cette macro?
  2. est __STRING standard / grand / mal?
  3. 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: - (
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top