2011-10-09 6 views
9

Ho una complicata istruzione switch e ho dimenticato di inserire uno break alla fine di uno dei case s. Questo è abbastanza legale e, di conseguenza, ho avuto una ricaduta fino al prossimo case.Come posso dire a gcc di mettere in guardia (o fallire) su istruzioni switch/case senza interruzione?

C'è un modo per fare in modo che gcc avvisi (o anche meglio, fail) se trascuro di inserire una dichiarazione break?

Mi rendo conto che esistono molti casi d'uso validi (e li uso spesso nel mio codice), come esemplificato in this question, quindi ovviamente tale avviso (o errore) richiederebbe una semplice rinuncia in modo tale da poter facilmente dire, "Voglio cadere qui."

C'è un modo per dire a gcc di farlo?

+0

Onestamente, se è questo che vuoi, io direi semplicemente non usare switch/case. L'unico vantaggio di switch/case che rimane è che è facile cadere nella direzione in cui lo si desidera. –

+0

Hehehe, C# ti costringe a inserire l'istruzione break e non si compila se non lo fai – BlackBear

+0

Solo curioso, possiamo vedere il codice? Forse c'è una soluzione ancora migliore che non richiede un interruttore. – fredoverflow

risposta

1

Si potrebbe costruire un regexp per grep/perl/emacs/etc per trovare tutti i luoghi dove non c'è break prima case.

0

La risposta breve è no, non esiste un flag di questo tipo in gcc per farlo. Switch case è usato per la caduta attraverso più spesso, ecco perché non ha senso avere un tale flag in gcc.

+2

Penso che abbia senso, semplicemente non ha bisogno di default su on. Sembra che potrebbe essere appropriato per -Wextra o -pedantic. –

4

Questo controllo è disponibile in Cppcheck, un analizzatore statico libero per codice C e C++. Il controllo è attualmente contrassegnato come "sperimentale", quindi sarà necessario utilizzare l'interruttore della riga di comando --experimental per attivarlo.

Questo controllo mette in guardia contro una clausola caso non vuoto che cade fino al caso successivo senza un rendiconto di controllo come break, continue, return, ecc, a meno v'è un commento con una formulazione come // fall through immediatamente precedente la prossima case.

È possibile ottenere un'idea per i tipi di costrutti che gestisce consultando lo switchFallThroughCase test cases nel codice sorgente.

Problemi correlati