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

286
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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