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

264
Vistas
¿Reglas de alcance del bucle `for` diferentes en C++ que en C?

Noté que las reglas de alcance del ciclo for son diferentes para C y C++.
Por ejemplo, el siguiente código es legal en el compilador de C, pero no legal en el compilador de C++.

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

El código anterior es válido en C, pero da un error de redefinición en C++.
Supongo que el compilador de C trata el ciclo como si hubiera otro ámbito dentro del ciclo como se muestra a continuación.

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

¿Por qué el compilador de C permite que se defina una segunda variable con el mismo nombre en el alcance del bucle? ¿Hay alguna razón o ventaja en particular para hacer esto?

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

0

En lo que respecta a los estándares, los ámbitos for se definen de manera diferente en C y en C++. En C se definen de la siguiente manera:

6.8.5.3 La sentencia for

La declaración

for (cláusula-1; expresión-2; expresión-3) declaración

se comporta de la siguiente manera: ...

sin referencia específica dada a las limitaciones en las declaraciones de variables dentro de la statement . La descripción de nivel superior de los bucles ("declaraciones de iteración" en el estándar) especifica:

Una declaración de iteración es un bloque cuyo alcance es un subconjunto estricto del alcance de su bloque adjunto. El cuerpo del ciclo también es un bloque cuyo alcance es un subconjunto estricto del alcance de la declaración de iteración.

como ha insinuado en su pregunta, codifique como:

 for (int i = 0; i < 10; ++i) int i = 5;

donde no se declara un nuevo bloque (observe que falta { } alrededor de la nueva declaración), no es un código válido.


Mientras que en C++, hay una referencia específica a la redeclaración de variables de bucle:

8.6 Las sentencias de iteración especifican bucles... Si un nombre introducido en una sentencia de inicio o en una declaración de rango se vuelve a declarar en el bloque más externo de la subsentencia, el programa está mal formado .


En lo que respecta a la lógica, es probable que C ++ solo agregue la restricción como una mejora en la semántica del lenguaje, de hecho, volver a declarar una variable de esta manera suele ser un error.

Podría decirse que esta restricción también es apropiada en C, pero agregar esta restricción al estándar C rompería la compatibilidad con el código existente y es poco probable que suceda.

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