Frage

Zum Lernen und dem Nachweis brauche ich ein Makro, das seinen Parameter druckt und bewertet es. Ich vermute, es ist ein sehr häufiger Fall, kann sogar eine FAQ sein, aber ich kann keine tatsächlichen Referenzen finden.

Mein aktueller Code ist:

#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", __STRING(expr), (expr)))

und dann:

PRINT(x & 0x01);

Es funktioniert gut, aber ich bin mir nicht sicher, ob der Rechtsstatus des __string -Makros, insbesondere da es sich im privaten __ -Namespace befindet.

Also meine Fragen:

  1. Gibt es eine bessere Möglichkeit, dieses Makro zu schreiben?
  2. Ist __string Standard/groß/böse?
  3. Wie benutze ich vorhandene Suchwerkzeuge, um über __string zu finden? Die Suchmaschine sucht nur etwas, das String enthält :-(
War es hilfreich?

Lösung

Sie können das # Preprozessor -Token verwenden, das sein RHS -Argument in ein String -Literal umwandelt:

#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) Es ist definitiv nicht Standard, und dies ist das erste Mal, dass ich darauf gestoßen bin. Kein Wunder, dass es auf einen ersten Blick nicht viel mehr zu tun scheint als das STR () -Makro.

3) Google scheint gut zu funktionieren.

Andere Tipps

Etwas wie

#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", #expr, (expr)))

ist wahrscheinlich was du willst. # ist der Stringungsoperator.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top