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

272
Views
En lenguaje C, ¿hay alguna diferencia entre estos dos bucles for?

A menudo veo dos formas de escribir para bucles.

El primero:

 for (int i = 0; i < 10; i++) { ...... }

El segundo:

 int i; for (i = 0; i < 10; i++){ ...... }

¿Hay alguna diferencia entre los dos métodos en términos de eficiencia de ejecución?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Como otros ya han señalado, la diferencia es el alcance y, en muchos casos, no hay diferencia en la eficiencia del programa.

En aras de poder depurar su código y razonar sobre lo que está haciendo, generalmente es recomendable tener variables para el alcance más pequeño posible. Cuanto más tiempo existe una variable, más cosas no deseadas puede hacerle. Si i no es necesario después del bucle, colóquelo localmente en el bucle.

Considere simplemente imprimir una matriz de enteros:

 void print_array(int *arr, size_t n) { for (size_t i = 0; i < n; ++i) { printf("%d\n", arr[i]); } }

Pero digamos que queremos encontrar el índice de un valor en una matriz int (donde i es n que indica que no se encontró el valor):

 size_t find_index(int val, int *arr, size_t n) { size_t i; for (i = 0; i < n && arr[i] != val; ++i) { // Nothing required here. } return i; }

En el último caso, el valor de i se necesitaba después de que se completara el bucle, por lo que no se podía aplicar localmente al bucle.

over 4 years ago · Santiago Trujillo Report

0

En términos de eficiencia de ejecución, no. Estos compilarán a la misma cosa. Vea la salida del compilador aquí . En cuanto a funcionalidad, sí, de forma muy minoritaria. El alcance de i es diferente. Entonces, en el segundo ejemplo podrías hacer esto:

 int i; for (i = 0; i < 10; i++){ if (some_condition) { break; } ... } // use i for some other purpose, like indexing a vector or something.

Pero debido al alcance de i , no puede hacer esto en el primer bucle.

over 4 years ago · Santiago Trujillo Report

0

La diferencia es que, en el segundo fragmento de código, la variable i está disponible (para inspección y uso) después de que el ciclo for haya terminado de ejecutarse; en el primer fragmento, no lo es.

Si no usa/inspecciona esa variable i después del ciclo (es decir, después del cierre } ), entonces un compilador de optimización probablemente producirá el mismo código para ambos.

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!