Posible duplicado:
C preprocesador y concatenación.
¿Alguien puede explicar con el ejemplo?
Permite construir indentificadores a partir de sus partes. P.ej:
#define CLASS_NAME(name) CLASS__ ## name
expandiría CLASS_NAME(alpha)
a CLASS__alpha
. Se usa ampliamente en los trucos utilizados por la biblioteca de preprocesadores boost, por ejemplo.
#define IF0(a, b) b #define IF1(a, b) a #define IF(cond, a, b) IF ## cond(a, b)
que expandiría IF(0, a, b)
a a
y IF(1, a, b)
a b
. Además, a veces, se utiliza para generar nombres de estructuras y funciones (similar a las plantillas de c ++).
No estoy seguro de lo que me gusta con el preprocesador “##”.
C tiene un preprocesador para expandir macros antes del tiempo de comstackción. Esta es una primera pasada en el código fuente. Hay algunas cosas diferentes para las que se utiliza:
#include
) #ifdef
etc.) #define
)
Tenga en cuenta, sin embargo, que esto no es realmente “C” (aunque es parte de la especificación) y puede causar dolores de cabeza si se equivoca. Creo que los nuevos idiomas ya no lo harían de esta manera.