4 ms·
https://www.chiark.greenend.org.uk/~sgtatham/coroutines.html https://www.chiark.greenend.org.uk/~sgtatham/coroutines.html int function(void) { static i
by runald 3y ago
https://www.chiark.greenend.org.uk/~sgtatham/coroutines.html https://www.chiark.greenend.org.uk/~sgtatham/coroutines.html
int function(void) {
static int i, state = 0;
switch (state) {
case 0: /* start of function */
for (i = 0; i < 10; i++) {
state = 1; /* so we will come back to "case 1" */
return i;
case 1:; /* resume control straight after the return */
}
}
}
Huh, I didn't know you could put case statements arbitrarily anywhere inside a switch block in C. Past the initial WTF, it's a nice hack for implementing coroutines.
- jedimastert 3y agoAs I understand it, they're kinda syntactic sugar for goto statements.
- gemstones 3y agoPersonal preferences differ, but I would find this code so much cleaner if it was a goto.
- zoky 3y agoOh yeah, you can toss ‘em in just about anywhere. The most well-known application of this would be Duff’s device: https://en.wikipedia.org/wiki/Duff%27s_device https://en.wikipedia.org/wiki/Duff%27s_device