→ carylorrk: C 什麼時候可以在 function 裡 define function 了... 03/06 20:46
→ carylorrk: 這看起來比較像是 Python 或 JS 之類的寫法。 03/06 20:46
→ littleshan: 因為 func_gen 在結束後,stack variable 就消滅了 03/06 20:47
→ littleshan: 其中包含它的 function pointer 參數 03/06 20:48
→ littleshan: 這就類似 return address of local variable 03/06 20:48
→ littleshan: nested function 在 C 裡面既不是標準,也不好用 03/06 20:48
→ carylorrk: 或是像 C++ lambda 之類的有 closure 的寫法 03/06 20:49
→ littleshan: 真的想玩 closure 就去玩 C++11 的 lambda 吧 03/06 20:50
※ 編輯: godman362 (106.1.215.164), 03/06/2015 20:54:41
※ 編輯: godman362 (106.1.215.164), 03/06/2015 20:55:33
→ godman362: 那再請教,為什麼jserv大sample的arg(stack var)卻沒 03/06 20:57
→ godman362: 消失呢? 03/06 20:57
→ godman362: 因為我在做的project是C,所以才只能用C的解法 03/06 20:58
→ godman362: 謝謝提供關於C++ closure的想法,我會去查看看 03/06 20:58
→ carylorrk: 原來還真的有 nested function 的 extension 啊 沒用過 03/06 21:26
→ descent: gcc ext 的用法 03/06 22:21
推 suhorng: 要參照一下 gnu extension 的文件 03/06 22:27
→ carylorrk: 看了一下,我也想知道 jserv 的寫法是正確的嗎? 03/06 22:46
→ carylorrk: 看起來唯一的差別就是原 PO 沒有加 static,不過這應該 03/06 22:47
→ carylorrk: 不會影響吧?(雖然在我的電腦上加了真的就可以跑了) 03/06 22:47
推 NilPtr: ANIS C沒有套層函數,Clang編譯器跟GCC有提供擴展功能 03/07 16:30
推 NilPtr: Jserv的程式是對的 但是要用這個GCC自訂功能要加編譯指令 03/07 16:40
→ NilPtr: -std=gnu11 03/07 16:41
→ godman362: 謝謝各位,我再找一下gcc extension的文件 03/07 20:48
→ godman362: 另外,照N大的說法加上後,也是沒辦法動作 03/07 20:50
推 NilPtr: 我研究了一會...GCC閉包內的指標跟上一層的指標會不同 03/08 01:55
推 NilPtr: 說錯 是一樣的 但是原本的上層如果不在的話 才會是不同的 03/08 01:59
→ NilPtr: 總之狀態整個很怪 我猜跟函數的Stack空間有關係= = 03/08 02:02
→ NilPtr: "西屏 你怎麼看?" "寶傑! 這一定跟外星人有關" 03/08 02:22
→ carylorrk: 我可以放棄嗎?懶得研究非標準的東西XD 03/08 04:07
→ godman362: 謝謝各位,因為我也打算換做法了 03/08 08:01
→ godman362: 我在外國的論壇看到多數人對C的nested-function持反對 03/08 08:02
→ godman362: 意見,而且也建議不要使用,所以我直接重想做法了 03/08 08:03