Programming 板


LINE

※ 引述《"marujoung" <[email protected]>, 看板: Programming》之铭言: : 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 时急冲冲地想写程式, 对变数视野这部份没下过功夫, : "<> 现在嚐到恶果了(无法解释这现象) : "<> 拜托各位大大帮我解惑, : "<> 程式不能这样写吗? : 我知道本板的高手很多, : 为什麽都保持沉默呢? 我已等了近两个月了... 不是高手保持沉默,而是他们没办法回答你的问题。 因为你的问题比较像是 dependency on compiler / os。 已经是高手等级的人,当菜鸟练功时用的 TC 版本大多为 2.01 左右,也就是十余年前。 而且现在多半已经不用 TC 了,因此无法复制你的 bug,自然无法回答你的问题。 : 期间我把施大师的着作拿出来 k 了, : 疑惑仍在: : func1 内的 int i 是在执行时以堆叠配置, : 而夹在 func1 和 func2 间的 int i 早在编译时就配置好了, 我大概有十年以上没碰 TC,当然我并不是高手, 但在我印象中 borland 的 compiler 对变数会分已初始化跟未初始化的资料, 分别置放在 BSS 与 DATA 节区,而你的 i 都是属於未初始化的资料。 如果我没记错,在 Boralnd C Compiler 的 memory model 中, small 的 bss, data 跟 stack 好像是在一起的。 我猜你大概是用 tiny 或 small 的 memory model。 你有没有试过改用 large 来 compiler? 或者观察 compiler 出来之後各变数的置放方式? : 两者在 RAM 中的位置并不相同, 应该不会干扰才对啊? 我只能说你太武断了,为什麽不把整个 memory map 弄出来看呢? : PS. 前文忘了讲, : 进 func1 及 func2 时 i 都会重设个启始值, : so 就算干扰了值都会重设. : --- 本站可传档、聊天、写信喔 ! : * Origin: 翡翠王国资讯站(BBS) [站址: 203.204.191.217] (0:0/0) : --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.137.86.26







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP