yield semantics in C/C++ Posted on 2014-02-09 Edited on 2024-11-15 In C , c++ 其他語言已經有yield的語意了,不過C/C++必須手動模擬。看了Coroutines in C之後,做了一下實驗。 12345678910111213141516int func(){ static int i, state = 0; switch (state) { case 0: goto LABEL0; case 1: goto LABEL1; }LABEL0: for (i = 0; i < 10; i++) { state = 1; return i;LABEL1:; } return -1;} 測試VC12、GCC和Clang之後,發現GCC要使用C99模式編譯才會成功。不過美增加一個狀態就得增加一個LABEL,也是蠻麻煩的一件事,後來看到一個作法更好,之前從沒想過能這樣用。 1234567891011121314int func(){ static int i, state = 0; switch (state) { case 0: for (i = 0; i < 10; i++) { state = 1; return i; case 1:; } } return -1;} 從沒想過switch/case的statement可以這樣用,開了眼界了。