ギャグでC言語で疑似yieldを実装しようとしてみたが,やめた

イメージ的にはこんな感じで書くと,

int f(){ printf("f1\n"); yield(); printf("f2\n"); return;}
int g(){ printf("g1\n"); yield(); printf("g2\n"); return;}
int main(){ f(); g(); }

実行結果が,

f1
g1
f2
g2

となる感じですかね? *1
setcontext, getcontext *2 の有効活用で作れそうだとは思うのだが,function call からの return 後の Instruction Pointer*3 を得るのがどうやるんだろうということを考えるのがめんどくなってしまった.誰かやってるような気もするが,どういう解決策をとるんでしょうかねえ,こういう場合.

*1:自分自身あんまyield理解してる気もしないが

*2:setjmp, longjmpは今は改良されてこの2つになっているらしい

*3:具体的には,main中で,fとgの隙間な