Re: TC++ 變數視野求教

看板Programming作者時間16年前 (2008/02/25 02:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/12 (看更多)
MSGID: 0:0/0 385882AE -KEY: 6A6A1CFE "<> void main(void) "<> { "<> if(func1()) "<> func2(); "<> } "<> "<> int func1(void) "<> { "<> int i; "<> : "<> : "<> return i; "<> } "<> "<> int i; "<> "<> void func2(void) "<> { "<> : "<> } "<> "<> 以上是我將程式簡化後的結構. "<> 會將 int i 放在 func1 及 func2 間是因 int i 本來在 func2 內(auto) "<> 而 func2 太大不符合大拇指原則, 所以我將 func2 切割成數個函式; "<> 但 i 是共用的, 所以我將之放在 func2 前宣告. "<> 怪的是這樣跑程式會出錯, "<> 若我將 func1 內的 int i 拿掉, 將 int i 移到 func1 前就正確了. "<> 不解的是 func1 內的 i 不是 auto 變數嗎? "<> 理應不會左右後面的外在變數 i 才對, "<> 且到了 func2 時 i 的值會重設, 而 func1 的 i 沒有進出. "<> 但事實顯示似乎兩個 i 會互相干擾..... "<> "<> 以前學 C 時急沖沖地想寫程式, 對變數視野這部份沒下過功夫, "<> 現在嚐到惡果了(無法解釋這現象) "<> 拜託各位大大幫我解惑, "<> 程式不能這樣寫嗎? 我知道本板的高手很多, 為什麼都保持沉默呢? 我已等了近兩個月了... 期間我把施大師的著作拿出來 k 了, 疑惑仍在: func1 內的 int i 是在執行時以堆疊配置, 而夾在 func1 和 func2 間的 int i 早在編譯時就配置好了, 兩者在 RAM 中的位置並不相同, 應該不會干擾才對啊? PS. 前文忘了講, 進 func1 及 func2 時 i 都會重設個啟始值, so 就算干擾了值都會重設. --- 本站可傳檔、聊天、寫信喔 ! * Origin: 翡翠王國資訊站(BBS) [站址: 203.204.191.217] (0:0/0)
文章代碼(AID): #17mR3W00 (Programming)
討論串 (同標題文章)
文章代碼(AID): #17mR3W00 (Programming)