Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

239
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!