這些回返點每個執行緒會將之記錄在一個堆疊上,如下圖:
上例中變數 n 的值不斷地被修改, 因此最後回傳時 n 之值為 2, 當然這個答案是錯的。 在 C 語言裡, 實際上每一次函式呼叫的變數 n 是完全不同的變數, 佔有不同的儲存位置, 所以執行的過程應該如下圖:
在函式返回時系統必須將堆疊上屬於那個函式的資料所有權釋放掉, 請注意系統沒那個閒功夫去把堆疊上不用的資料清除, 所以函式回返以後千萬不要再去存取函式內的變數了, 同時函式開始執行時不要以為區域變數裡的值會是 0。
注意:
就已經超過它的能耐了, 程式編譯的時候不會錯, 但是執行時就要看你的造化, 有時會對, 有時會錯, 沒有一定的啦! 在 TURBO C 中你應該要用下面的敘述來增加堆疊的大小:
那就安全啦! 如果你用其它的編譯器, 請自己去找到它是如何來控制堆疊大小的, 每一個編譯器 (連結器) 都應該有可以設定的機制。
回
程式設計課程
首頁
by Pei-yih Ting
E-mail: pyting@cs.ntou.edu.tw