Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

269
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda