Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

464
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda