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

241
Visualizações
C ++ Si declaración antes del caso en el interruptor

Tengo la tarea de reescribir un software antiguo para mi empresa y encontré una construcción interesante dentro de las fuentes.

 switch(X){ if(Y==Z){ case A: ... break; case B: ... break; } case C: ... break; default: ...; }

El compilador me advierte que el código dentro de la declaración if no se ejecutará, pero durante la prueba parece que la declaración if no está validada, sin embargo, las declaraciones case sí lo están.

¿Hay alguna razón, tal vez los primeros días de C ++, ya que parte del código tiene más de 20 años, por qué escribiría una construcción como esa? Está en código de producción, ¿así que parece hacer algo?

Estaría agradecido por cualquier información interna de por qué esto podría haberse hecho y si puedo ignorarlo como parece hacer el compilador.

Editar: también ocurre varias veces, por lo que no parece ser un simple error. Esto es lo que me está confundiendo.

Edit2: Aquí está el ejemplo que usé para probar. No estoy seguro de cuán útil es, sin embargo, el código original está dentro de una función de monstruo de 1200 líneas, por lo que crear uno a partir de eso es básicamente imposible.

 for (int i=0; i<5;i++) { switch(i) { if (i==0 || i ==1) { cout << "reached before case"; case 0: cout << "inside case 0" << std::endl; break; case 1: cout << "inside case 1" << std::endl; break; case 2: cout << "inside case 2" << std::endl; break; } case 3: cout << "inside case 3" << std::endl; break; default: cout << "inside default" << std::endl; } }
over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

¿Hay alguna razón... por la que escribirías una construcción como esa?

Solo el autor lo sabe con seguridad (incluso ellos podrían no saberlo). Si hay metadatos de control de versiones de origen disponibles, el mensaje de confirmación asociado podría ser útil. Sin más información, solo podemos adivinar lo que estaban pensando. Algunas posibles respuestas:

  • El autor asumió que la condición de la declaración if tendría algún efecto, pero estaban equivocados y no se probó el error.
  • Es un resultado vestigial de alguna refactorización.
    • Tal vez se eliminó algún código que solía hacer que la declaración fuera significativa.
    • O tal vez fue copiado de otro lugar donde tenía un significado.
    • O tal vez solía haber una serie de declaraciones condicionales y había una intención de reemplazarlas con un cambio, pero el cambio fue a medias.
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