¿Cuál es el uso del preprocesador ## en C

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:

  • Incluyendo otros archivos fuente / encabezado ( #include )
  • Código de comstackción condicional ( #ifdef etc.)
  • expandiendo macros ( #define )
    • práctico para constantes
    • funciones simples

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.