一个while的小小问题
2014-05-29 12:55
155 查看
最近东搞西搞,一下子搞X平台uboot的flash问题,一下子搞Y平台的接收YUV数据上位机,频繁切换,但都没什么主要事务,听说其他部门的人连接客户电话都计时,按任务算的。可惜自己所在部门没开通这个业务。
闲话不多说,在看代码中,发现一个while语句,怎么看总觉得有问题,又不知确切出在哪里,于是就简单写了个测试程序。
示例:
实际的函数用途是做超时判断,while中有delay延时,这里不写出来。上面的例子,一般人认为最终i的值是0,但实际上即是-1。是当while判断为0时不进入循环,但此时i--还会自减。因为i--本身就是先判断i的值再自减。如果将while (i--)改为while (--i) ,i的最终结果为0。
为了防止出现问题,建议作如下判断:
有时候我觉得,大学里的C语言试题还是有点用处的,只要不过分,都能接受,也能学到点东西——只是不知道什么时候会真正觉得派上用场。像我,2010年搞了下点阵字体,结果2年后在实际工作中用上了一些知识。
李迟记于2014年5月29日
闲话不多说,在看代码中,发现一个while语句,怎么看总觉得有问题,又不知确切出在哪里,于是就简单写了个测试程序。
示例:
int main(void) { int i = 10; while (i--) { printf("hello: %d\n", i); } if (i == 0) { printf("last-----------i == 0\n"); } else { printf("last-----------i != 0 (%d)\n", i); } return 0; }
实际的函数用途是做超时判断,while中有delay延时,这里不写出来。上面的例子,一般人认为最终i的值是0,但实际上即是-1。是当while判断为0时不进入循环,但此时i--还会自减。因为i--本身就是先判断i的值再自减。如果将while (i--)改为while (--i) ,i的最终结果为0。
为了防止出现问题,建议作如下判断:
int main(void) { int i = 10; while (i--) { printf("hello: %d\n", i); } if (i<=0) { printf("timeout or sth wrong\n"); } return 0; }
有时候我觉得,大学里的C语言试题还是有点用处的,只要不过分,都能接受,也能学到点东西——只是不知道什么时候会真正觉得派上用场。像我,2010年搞了下点阵字体,结果2年后在实际工作中用上了一些知识。
李迟记于2014年5月29日
相关文章推荐
- 小程序大问题,MSDN中一个小小示例所带来的疑问,一个关于DataList的一个简单应用
- 发现KJC模板的一个小小问题!
- 关于数组的一个小小的问题
- LeetCode上关于Min Stack遇到的一个小小问题
- 一个小小的问题耗费了两个小时的时间
- 通过一个小小的问题提起良好习惯的养成
- 关于启动hadoop的一个小小小问题
- 解决一个小小的老问题“SQL2005执行安装向导期间出错
- openerp安装一个新模块出的问题Validate Error Error occurred while validating the field(s) arch: Invalid XML for
- 使用FragmentActivity遇到的一个小小的问题
- 【小小问题集锦4--拆分一个字符串的方法】
- 小小问题集锦4--拆分一个字符串的方法
- 小小问题集锦6之---查询条件非常复杂时解决效率不高的一个办法
- 一个小小小问题
- 关于一个Hashtable的小小问题
- 小程序大问题,MSDN中一个小小示例所带来的疑问,一个关于DataList的一个简单应用
- 采用JQuery提交表单的一个小小问题
- 一个关于while(cin>>a)的一个不得不注意的问题
- 关于Android线性布局的一个小小的问题
- 使用 Intellij idea Springboot maven 的一个小小的问题