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

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

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