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

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

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 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!