Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

465
Vistas
¿Cómo puedo usar una macro dentro de otra macro para concatenar la definición de la macro con algo? C/C++

Estoy tratando de crear una macro que tomará un prefijo predefinido y lo concatenará con el nombre de la función deseada en el argumento de la macro, pero no he tenido éxito.

Por ejemplo, mientras que esta es la firma de la función deseada:

 void somePrefix__someFunc(int a)

Sin embargo, cuando lo ejecuto y reviso la tabla de símbolos del programa, termino con la expansión de:

 FUNC_PREFIXsomeFunc

¿Qué estoy haciendo mal y cómo puedo hacerlo correctamente?

El código que estaba tratando de ejecutar:

 #include <iostream> #define CONCAT(A, B) A##B #define FUNC_PREFIX somePrefix__ #define FUNC_NAME(_func) CONCAT(FUNC_PREFIX, _func) void FUNC_NAME(someFunc)(int a) { std::cout << a << std::endl; } int main() { FUNC_NAME(someFunc)(2); return 0; }

PD: Intenté usar la macro sin un envoltorio CONCAT (tratando directamente de FUNC_PREFIX##_func ), pero aún así no funcionó.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

El ## siempre se aplica antes de que se (re)escanee la macro "lista de reemplazo", por lo que en caso de que CONCAT se expanda antes que los demás elementos, no obtendremos el resultado deseado. Cada vez que terminamos con un ## en la lista de reemplazo durante el reemplazo de macros, se aplica antes de cualquier otro reemplazo.

Por lo tanto, necesita una macro de ayuda adicional para expandir FUNC_PREFIX , de modo que se expanda antes que CONCAT :

 #include <stdio.h> #define CONCAT(A, B) A##B #define CONCAT_EXPAND(A, B) CONCAT(A,B) #define FUNC_PREFIX somePrefix_ #define FUNC_NAME(func) CONCAT_EXPAND(FUNC_PREFIX, func) void FUNC_NAME(someFunc)(int a) { printf("%s: %d\n",__func__, a); } int main() { FUNC_NAME(someFunc)(2); return 0; }

Producción:

 somePrefix_someFunc: 2
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda