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

150
Vistas
¿Es posible definir una macro a partir de una macro?

Esto es lo que estoy pensando.

 #define prefix_1 1 #define prefix_2 2 #define prefix_3 3

Y quiero definir una macro usando los prefijos anteriores, como macro macro_prefix_1 macro_prefix_2 , y espero que se conviertan en macro_1 macro_2 , etc. Al igual que el código a continuación

 #define macro_##prefix_1 I_am_macro_1 #define macro_##prefix_2 I_am_macro_2

es posible?

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

0

Desafortunadamente, lo que estás tratando de hacer es imposible. La directiva (##) es imposible de usar dentro de una declaración de macro. Sólo es posible utilizarlo dentro de la definición como tal.

 #define glue(a,b) a ## b glue(c,out) << "test";

Ejemplo tomado de cplusplus.com

A continuación, he escrito un ejemplo de lo que quieres hacer.

 #include <stdio.h> #define prefix_1 1 #define prefix_2 2 #define prefix_3 3 #define macro_##prefix_1 "macro_1" #define macro_##prefix_2 "macro_2" #define macro_##prefix_3 "macro_3" int main(){ printf("%s\n%s\n%s\n", macro_prefix_1, macro_prefix_2, macro_prefix_3); return 0; }

Cuando intente compilar el código anterior, obtendrá este registro de compilación.

 ||=== Build: Debug in file_test (compiler: GNU GCC Compiler) ===| main.cpp|7|warning: missing whitespace after the macro name [enabled by default]| main.cpp|7|error: '##' cannot appear at either end of a macro expansion| main.cpp|8|warning: missing whitespace after the macro name [enabled by default]| main.cpp|8|error: '##' cannot appear at either end of a macro expansion| main.cpp|9|warning: missing whitespace after the macro name [enabled by default]| main.cpp|9|error: '##' cannot appear at either end of a macro expansion| main.cpp||In function 'int main()':| main.cpp|13|error: 'macro_prefix_1' was not declared in this scope| main.cpp|13|error: 'macro_prefix_2' was not declared in this scope| main.cpp|13|error: 'macro_prefix_3' was not declared in this scope| ||=== Build failed: 6 error(s), 3 warning(s) (0 minute(s), 0 second(s)) ===|

Entonces, si desea poder tener macros, solo tendrá que agregar el prefijo normalmente. Afortunadamente, básicamente ya estabas haciendo esto, pero agregando "##". Espero que esto haya ayudado.

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