C++ - Force compile-Zeit-Fehler/Warnung auf impliziten fall-through switch

switch Aussagen kann, super hilfreich, führen aber zu einem gemeinsamen Fehler behoben, wo ein Programmierer vergessen, eine break-Anweisung:

switch(val) {
    case 0:
        foo();
        break;
    case 1:
        bar();
        //oops
    case 2:
        baz();
        break;
    default:
        roomba();
}

Werden Sie nicht bekommen eine Warnung offensichtlich, da fallen manchmal-durch ist ausdrücklich gewünscht. Guter coding style schlägt zu kommentieren, wenn Ihr fall-through ist gewollt, aber manchmal ist das nicht ausreichend.

Ich bin mir ziemlich sicher, dass die Antwort auf diese Frage ist Nein, aber: gibt es eine Möglichkeit, die derzeit (oder vorgeschlagen, in der Zukunft) in die Lage zu bitten, dass der compiler wirft einen Fehler (oder zumindest eine Warnung!) wenn Ihr case nicht mindestens eine break; oder etwas zum Effekt von //fallthru? Es wäre schön, wenn eine defensive Programmierung die option für die Verwendung switch Aussagen.

  • Welche compiler verwenden Sie? Ich weiß, ich habe gesehen, discussion der Zugabe einer optionalen Warnung, die auf den gcc. Nicht sicher, was gekommen, allerdings noch nicht.
  • klingt wie eine änderung, die potenziell die Pause legacy-code, wenn es ist alles andere als eine Warnung.
  • Ich bin mit gcc 4.7
  • Auch scheint es, dass einige statische code Analyzer wie CPPCheck fangen Sie dies, wenn Sie verwenden.
  • Tatsächlich, cppcheck nicht zu finden, die den spezifischen fehlt break, führte zu dieser Frage 🙁
  • Wenn Sie Polymorphismus statt der Umstellung werden Sie immer vermeiden, das Zeug! 😀
  • Es war ein coverity-blog-post über dieses Thema vor ein paar Monaten.
  • Ein weiterer Weg, um "zu vermeiden, all dieses Zeug", ist die Verwendung einer Funktion Tabelle.

InformationsquelleAutor Barry | 2015-01-15
Schreibe einen Kommentar