看板Programming
标 题Re: TC++ 变数视野求教
发信站Giga News Service (Sun Feb 24 22:04:19 2008)
转信站ptt!ctu-reader!ctu-peer!news.nctu!csnews.cs.nctu!news.cs.nctu!news.gig
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)