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

113
Views
Llame a #define varias veces en función de un valor específico

Si llamas a algo como esto en C:

 #include <stdio.h> #define REPS ,a ... int a = 1; printf("%d" REPS);

Funcionará, pero ¿es posible llamar a la macro REPS varias veces en función de un valor desconocido, como por ejemplo, que quiero tener cinco entradas en un scanf , pero quiero que mi código lo automatice (por ejemplo, si #define REPS ,a[i] entonces: ... ,a[1] ,a[2] )?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Funcionará, pero ¿es posible llamar a REPS varias veces en función de un valor desconocido?

No. #define crea una macro de preprocesador que puede usar en su código, pero cuando el compilador compila su código, el valor real se sustituye por la macro. Si usted tiene:

 #define FOO 7

por ejemplo, cada aparición de FOO en su código se reemplaza por 7 antes de compilar el código; para cuando el compilador ve tu código, no hay #define ni FOO , solo 7 donde sea que haya FOO . Aunque existen otros comandos de preprocesador (p. ej. #if ) que pueden controlar si se evalúa un determinado #define , no existen otras estructuras de control de preprocesador (bucles, etc.).

Quiero tener cinco entradas en un scanf, pero quiero que mi código lo automatice (por ejemplo, si #define REPS ,a[i] entonces: ... ,a[1] ,a[2])?

Ciertamente puedes automatizar algo así; es solo que el preprocesador no es la herramienta adecuada para el trabajo. Considerar:

 int reps = 5 //... for (int i = 0; i < reps; i++) { scanf(" %d", &a[i]); }
over 4 years ago · Santiago Trujillo Report

0

REPS se evalúa en tiempo de compilación, por lo que no puede depender de los valores de tiempo de ejecución en este caso, a archivo . Hay trucos, pero en general no se pueden compilar bucles con macros.

Le sugiero que escriba una función a lo largo de estas líneas en su lugar:

 #include <stdio.h> void print_int_array(size_t n, int a[n]) { for(int i = 0; i < n; i++) printf("%d%s", a[i], i + 1 < n ? ", " : "\n"); } int main() { print_int_array(0, (int []) {}); print_int_array(1, (int []) {1}); print_int_array(2, (int []) {1, 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!