Pregunta

Tengo la siguiente macro para definir una nueva función siguiendo un esquema de nomenclatura especial:

#define CREATE_HOOK_STUB( func ) void ##func_STUB() { /* some code*/ }

Sin embargo, el preprocesador siempre concatena void y ##func_STUB pero obviamente quiero que preserve el espacio en blanco en esa posición.

Sé que podría simplemente anteponer una cadena a ##func_STUB, pero esto no es lo que quiero.¿Cómo solucionaría esto?

¿Fue útil?

Solución

Creo que lo que realmente quieres está más cerca de:

#define CREATE_HOOK_STUB( func ) void func##_STUB() { /* some code*/ }

Pero también deberías mirar esta respuesta SO vinculada que tiene algunos detalles adicionales sobre el comportamiento del operador de pegado de tokens:

Una cosa que debe tener en cuenta cuando utiliza los operadores de preprocesamiento de pegado de tokens ('##') o encadenamiento ('#') es que debe usar un nivel adicional de direccionamiento indirecto para que funcionen correctamente en todos los casos.

Si no hace esto y los elementos pasados ​​al operador de pegado de tokens son macros en sí mismos, obtendrá resultados que probablemente no sean los que desea...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top