6 Stimmen

Wie funktioniert dieser C-Code?

Was ist a##b & #a ?

  #define f(a,b) a##b
  #define g(a)   #a
  #define h(a) g(a)

  main()
  {
          printf("%s\n",h(f(1,2)));  //how should I interpret this?? [line 1]
          printf("%s\n",g(f(1,2)));  //and this? [line 2]
  }

Wie funktioniert dieses Programm?


Die Ausgabe lautet

12
f(1, 2)

jetzt verstehe ich, wie a##b & #a Arbeit. Aber warum ist das Ergebnis in den beiden Fällen (Zeile 1 und Zeile 2) unterschiedlich?

0voto

Konamiman Punkte 48557

## ist der Makroverkettungsoperator. Also zum Beispiel f(foo,bar) wäre gleichbedeutend mit foobar .

0voto

StevenWang Punkte 3429
  #define f(a,b) a##b
  #define g(a)   #a
  #define h(a) g(a)

Also, ## kombinieren 2 Teile direkt zusammen, egal, welche Arten sie sind... Ich gebe dir ein Beispiel. printf("%d\n",f(1,2)); erhält man 12, d.h. hier ist f(1,2) 12 eine ganze Zahl.

    int a2 = 100;
    printf("%d\\n",f(a,2));

Hier ist f(a,2) ein Etikett. Es zeigt auf ein Etikett in Ihrem Code-Kontext, wenn es nicht vorhanden ist int a2 = 100 erhalten Sie Kompilierfehler. Und #a verwandelt das, was auch immer a ist, in eine Zeichenkette... Und dann h(a) g(a) Es ist sehr seltsam Es sieht so aus, dass, wenn man h(a) aufruft, es sich in g(a) verwandelt und a in g(a) übergibt, zuerst interpretiert, was a ist. also, bevor man g(a) kann, wird a in f(a,b) = a##b = 12 transformiert

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X