免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: GG_MM
打印 上一主题 下一主题

百思不得其解,万思不得其解<在线等待中........> [复制链接]

论坛徽章:
0
11 [报告]
发表于 2004-04-04 20:50 |只看该作者

百思不得其解,万思不得其解<在线等待中........>

我的意思不是他return 什么, 只是为什么会跳转到 // return 1
应该是在return 2 处返回的,这不合逻辑,也不是我的本意

论坛徽章:
0
12 [报告]
发表于 2004-04-04 20:54 |只看该作者

百思不得其解,万思不得其解<在线等待中........>

我单步跟踪了,是返回的2。不象楼主说的那样。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
13 [报告]
发表于 2004-04-04 20:56 |只看该作者

百思不得其解,万思不得其解<在线等待中........>

我在tc2.0中试了,顺序正确。
你是在tc3.0中,你的代码就是这样子的,
没有经过简化?

论坛徽章:
0
14 [报告]
发表于 2004-04-04 21:01 |只看该作者

百思不得其解,万思不得其解<在线等待中........>

要是失败就返回,就不会执行到第二处打开了。

论坛徽章:
0
15 [报告]
发表于 2004-04-04 21:03 |只看该作者

百思不得其解,万思不得其解<在线等待中........>

楼主会不会单步跟踪啊?

论坛徽章:
0
16 [报告]
发表于 2004-04-05 00:23 |只看该作者

百思不得其解,万思不得其解<在线等待中........>

谢谢大家的帮助: 我找到答案了
我的代码是在一个函数中,在void main函数中的return 1 是不对的,我贴错了




  1. /*   in my function  */
  2. FILE *fptr;
  3. if(   (fptr = fopen(filename,"r"))   !=   NULL) // open one
  4.    return 1; // return one
  5. else
  6.   if (   (fptr = fopen(filename,"w+"))    !=    NULL) //open two
  7.      return 1; //return two
  8.   else
  9.     return 0;

  10. 我在3.0中,用Ctrl + F8 设置断点 在open one 那条语句上
  11. 再按F8 单步执行
  12. 若文件不存在时<第二次fopen后>;
  13. 确实就是跳转到了 return one 上<绿色的执行条>;
  14. 但是我将return two 改为 return 2;
  15. 就对了,我怀疑是tc3.0的问题,接下来,更奇怪的事情发生了
  16. 我又在两处的return 前各加一句fclose(fptr);
  17. 代码如下
  18. /*   in my function  */
  19. FILE *fptr;
  20. if(   (fptr = fopen(filename,"r"))   !=   NULL){ // open one
  21.    fclose(fptr); //close one
  22.    return 1; // return one
  23. }
  24. else
  25.     if (   (fptr = fopen(filename,"w+"))    !=    NULL){ //open two
  26.        fclose(fptr); // close two
  27.         return 2; //return two
  28.     }
  29.     else
  30.        return 0;
  31. 文件不存在的情况下: open two 语句后 跳转到了
  32. close one   !!!
  33. 之后又执行
  34. return one  !!!!
  35. 于是就返回了 1  !!!!
  36. 于是,我就不知道怎么办了,现在实验中.............




复制代码

论坛徽章:
0
17 [报告]
发表于 2004-04-05 06:23 |只看该作者

百思不得其解,万思不得其解<在线等待中........>

一点也不奇怪。那是由于编译器作了优化的缘故。两处的代码一样,编译器就给合并了。试一下就知道了:

  1. 菜单
  2. Options->;Compiler->;Optimizations...  
  3. 里面
  4. Optimize For  

  5. Size
  6. 改成
  7. Speed
  8. 然后
  9. Build all
复制代码

论坛徽章:
0
18 [报告]
发表于 2004-04-05 09:49 |只看该作者

百思不得其解,万思不得其解<在线等待中........>

同意hsia
另外,fstat可以检测到文件是否存在

论坛徽章:
0
19 [报告]
发表于 2004-04-06 22:24 |只看该作者

百思不得其解,万思不得其解<在线等待中........>

事情正如 hsia 兄说的一样,多谢
linuxlab 该用户已被删除
20 [报告]
发表于 2004-04-07 21:24 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP