¿Forzar espacios en blanco en C Macro?
-
11-09-2019 - |
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?
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...