Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

452
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!