我剛剛查找了gcc的功能屬性 (http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Function-Attributes.html) 並且遇到了returns_twice
屬性。函數屬性returns_twice
而且我絕對無能在什麼情況下函數可以返回兩次......我連忙擡頭提到vfork()
和setjmp()
但繼續沒有想法的應用場景的樣子 - 有人對你使用它或能解釋位?
我剛剛查找了gcc的功能屬性 (http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Function-Attributes.html) 並且遇到了returns_twice
屬性。函數屬性returns_twice
而且我絕對無能在什麼情況下函數可以返回兩次......我連忙擡頭提到vfork()
和setjmp()
但繼續沒有想法的應用場景的樣子 - 有人對你使用它或能解釋位?
的setjmp
功能類似於創建標籤(在goto
意義上的),因此你首先會從setjmp
返回當您設置標籤,然後每一次,你實際上跳過。
如果它似乎不可思議,放心,你不應該在你的日常編程使用setjmp
。或者實際上......你應該完全不用。這是打破預期的執行流程(很像goto
),特別是在C++中一個非常低級的指令,大部分的不變量,你可以期待。
當你調用setjmp
,它確立了一個折返點,然後繼續執行立即setjmp
調用下面的代碼。
在某一點在後面的代碼,調用longjmp
(與以前調用初始化setjmp
跳轉緩存)返回執行從同一點重新開始(即代碼立即呼叫的setjmp
以下)。
因此,原來的調用正常返回,然後在任意晚些時候,執行返回(或至少可以返回)再次到同一個點。
屬性只是警告這一事實的編譯器。
查一查'的vfork()'和'的setjmp()'慢。 – alk