作者oohay (五黑)
看板Programming
标题Re: TC++ 变数视野求教
时间Mon Feb 25 05:30:53 2008
1. 别人不见得学过所谓 "大拇指原则"
2. 为什麽你会猜测是func1把区域变数i当作全域变数使用? 凭什麽说违反视野?
3. 出错,错误讯息讲什麽,指向哪一行,看清楚了在做除错动作.
或许你可以把全域变数i移到最前面,但也别删掉func1内的区域变数i.
※ 引述《"marujoung" <[email protected]>, 看板: Programming》之铭言:
: 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 就算干扰了值都会重设.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.231.67.74