4 ms·
But then you would need 'unbreak' or just 'goto' to the next case. No duffs device no cigar. Probably a module/namespace system would be the biggest improvemen
by andi999 5y ago
But then you would need 'unbreak' or just 'goto' to the next case. No duffs device no cigar.
Probably a module/namespace system would be the biggest improvement.
- jimsmart 5y agoFWIW: Go's switch statements are break by default, with an explicit 'fallthrough' keyword if one wishes to override that behaviour.
- cpeterso 5y agoclang and gcc have a -Wimplicit-fallthrough warning flag that will warn about switch cases that fall through without either C++17's [[fallthrough]] attribute or a /* fallthrough */ comment. I made Firefox's code base able to compile with -Wimplicit-fallthrough. About one hundred fall through cases needed to be annotated and about 2-3 were actual bugs (though minor).
- jcranmer 5y agoThe only real case I use switch fallthrough for is when you have two cases with the same code, e.g.: switch (foo) { case 1: case 2: /* common body */ break; case 3: /* body 3 */ break; } It's not cognitively hard to make an empty case body fallthrough to the next run, but include an implicit break at the end of every nontrivial body. Supporting Duff's Device is not a compelling feature to support--irreducible loops are basically going to destroy any hope of optimization you might accrue.
- jackewiehose 5y ago> The only real case which is probably the case in 90% of all my switch'es. Worst use of a time machine ever.
- pjmlp 5y ago> But then you would need 'unbreak' or just 'goto' to the next case. No duffs device no cigar. From Algol's linage point of view, a very good outcome.
- Someone 5y agoYes, but you would need way fewer of such phrases than you need now. Making the exceptional case take more code is the way to go, IMO. Many languages also support something like case 1,2,4: or even case 1-10, 20-22, 34: That further decreases the need for falling through.