preprocesador ifdef endif c++ c concatenation c-preprocessor

c++ - ifdef - ¿Qué hace##(double hash) en una directiva de preprocesador?



endif c++ (1)

## es el operador del preprocesador para la concatenación.

Entonces si usas

DEFINE_STAT(foo)

en cualquier parte del código, se reemplaza con

struct FThreadSafeStaticStat<FStat_foo> StatPtr_foo;

antes de que tu código sea compilado

Aquí hay otro ejemplo de una publicación de blog mía para explicar esto más.

#include <stdio.h> #define decode(s,t,u,m,p,e,d) m ## s ## u ## t #define begin decode(a,n,i,m,a,t,e) int begin() { printf("Stumped?/n"); }

Este programa se compilaría y ejecutaría con éxito, y produciría el siguiente resultado:

Stumped?

Cuando el preprocesador funciona en este código,

  • begin() se reemplaza por decode(a,n,i,m,a,t,e)()
  • decode(a,n,i,m,a,t,e)() se reemplaza por m ## a ## i ## n()
  • m ## a ## i ## n() se reemplaza por main()

Así efectivamente, begin() se reemplaza por main() .

#define DEFINE_STAT(Stat) / struct FThreadSafeStaticStat<FStat_##Stat> StatPtr_##Stat;

La línea anterior es tomada de Unreal 4, y sé que podría preguntar sobre los foros irreales, pero creo que esta es una pregunta general de C ++ que merece ser preguntado aquí.

Entiendo que la primera línea define una macro, sin embargo, no estoy muy versado en los chanchullos del preprocesador en C ++, así que estoy perdido allí. La lógica me dice que la barra invertida significa que la declaración continúa en la siguiente línea.

FThreadSafeStaticStat se parece un poco a una plantilla, pero hay # y una sintaxis que nunca antes había visto en C ++

¿Podría alguien decirme qué significa esto? Entiendo que es posible que no tenga acceso a Unreal 4, pero es solo la sintaxis que no entiendo.