вот примерчик функции, при вызове которой попадаешь в ту же строку, откуда вышел:
foo(){
static int st = 0;
switch(st){
case 0:
;
st =__LINE__; return; case __LINE__:;
;
st =__LINE__; return; case __LINE__:;
}
st = 0;
}
естественно, st (указатель на st) может быть параметром функции
Adam Dunkels на этом деле сделал свои protothreads