Viele Antworten scheinen sich auf die Fähigkeit zu konzentrieren, als Grund für die Forderung nach dem Durchfallen zu fallenbreak
Aussage .
Ich glaube, es war einfach ein Fehler, vor allem, weil bei der Entwicklung von C nicht annähernd so viel Erfahrung mit der Verwendung dieser Konstrukte vorhanden war.
Peter Van der Linden macht den Fall in seinem Buch "Expert C Programming":
Wir haben die Sun C-Compilerquellen analysiert, um festzustellen, wie oft der Standard-Fall-Through verwendet wurde. Das Sun ANSI C-Compiler-Frontend verfügt über 244 switch-Anweisungen, von denen jede durchschnittlich sieben Fälle aufweist. In nur 3% aller dieser Fälle tritt ein Durchfall auf.
Mit anderen Worten, das normale Schaltverhalten ist in 97% der Fälle falsch . Es ist nicht nur in einem Compiler - im Gegenteil, wo in dieser Analyse Fall Through verwendet wurde, war es häufig für Situationen, die in einem Compiler häufiger auftreten als in anderer Software, beispielsweise beim Kompilieren von Operatoren, die entweder einen oder zwei Operanden haben können ::
switch (operator->num_of_operands) {
case 2: process_operand( operator->operand_2);
/* FALLTHRU */
case 1: process_operand( operator->operand_1);
break;
}
Das Durchfallen von Fällen ist so weit verbreitet, dass es sogar eine spezielle Kommentarkonvention gibt, die oben zeigt, dass "dies wirklich einer der 3% der Fälle ist, in denen ein Durchfallen gewünscht wurde".
Ich denke, es war eine gute Idee für C #, am Ende jedes Fallblocks eine explizite Sprunganweisung zu verlangen (während immer noch mehrere Fallbezeichnungen gestapelt werden können - solange es nur einen einzigen Anweisungsblock gibt). In C # kann immer noch ein Fall in einen anderen fallen - Sie müssen nur den Fall explizit machen, indem Sie mit a zum nächsten Fall springengoto
.
Es ist schade, dass Java die Gelegenheit nicht genutzt hat, um von der C-Semantik abzubrechen.