Re: TC++ 變數視野求教
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)
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 3 之 12 篇):