Not really its just a static var on a switch statement nothing really bad about it, in fact its a semi nice way to handle a simple state machine.
Not tooo uncommon either. It's a "reasonable" way to write generators in C (if you're masochistic Python programmer, I guess.)
Switch on the last return point at the top of the function, and make all variables that need to persist between calls `static`.
(I've written it before, and I swear I didn't invent it... Maybe it's just a short skip from Duff's Device? Still, using it to pick up before the last return instead of after is new trick for me!)
Yes, it's basically the idea in Duff's device. Protothreads (http://dunkels.com/adam/pt/) uses a pretty similar trick.
Ah, that's exactly the trick I was thinking of. I think I learned it from [1], but I'm pretty sure Protothreads predates that post. Thanks for the link!
1: https://www.chiark.greenend.org.uk/~sgtatham/coroutines.html
This was modeled on early Fortran where all local variables were static and it was trivial to implement persistent state machines.
To my eyes it also looked like a Duff's device which kept track of the successful state.
Yup. First thing that popped into my mind - with Duff's observation following shortly thereafter. Clever...too clever by half, IMNSHO.
> without mentioning the code smell around statics
Or the code smell around fall through switch statements.
There are legitimate uses for fall through switch statements and/or mid-file includes, and or static function vars, but combining all of them together is not clever, it's a recipe for bugs.
Now, as a working curiosity, this is pretty damn cool.