找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1535|回复: 16
打印 上一主题 下一主题
收起左侧

这个C语言函数有点不解,A与B应该是一样的吧?为什么专家要这样写呢?

  [复制链接]
跳转到指定楼层
楼主
ID:382454 发表于 2019-10-18 15:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个函数有点不解,A与B应该是一样的吧?   为什么专家要这样写呢?
就是 while( (ms--) != 0)这里  为什么要加个!=0呢????意义是什么?
下面的void Delay_B_ms(unsigned int ms)我执行了一下,一样的啊。

while(ms--)
  1. #include<reg52.h>                                //52系列单片机头机文件
  2. #include<intrins.h>
  3. #define uint unsigned int                //宏定义
  4. #define uchar unsigned char                //宏定义

  5. //****************************//
  6. void Delay_A_ms(unsigned int ms)
  7. {
  8.   while( (ms--) != 0)        
  9.   {
  10.     P0=~P0;;
  11.   }            
  12. }
  13. //*******************************//
  14. void Delay_B_ms(unsigned int ms)
  15. {
  16.   while(ms--)
  17.   {
  18.     P0=~P0;;
  19.   }            
  20. }

  21. /*******************************************************************************
  22. * 函 数 名       : main
  23. * 函数功能                 : 主函数
  24. * 输    入       : 无
  25. * 输    出             : 无
  26. *******************************************************************************/
  27. void main()
  28. {        
  29.         P0=~P0;
  30.         Delay_B_ms(3);
  31.         P0=~P0;        
  32.                
  33. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:195690 发表于 2019-10-18 16:11 | 只看该作者
意思就是延时那么长时间的机器周期,程序停在那里,当ms的值减到0的时候结束循环,执行后面的语句
回复

使用道具 举报

板凳
ID:282850 发表于 2019-10-18 16:53 | 只看该作者
while( (ms--) != 0)是意思是:当ms,如初始ms=1000,自减1,为999,如果ms没有=0,则一直反复自减,到0时跳出while。
回复

使用道具 举报

地板
ID:621475 发表于 2019-10-18 17:05 来自手机 | 只看该作者
A,B的确一样,但A并没有调用
回复

使用道具 举报

5#
ID:246215 发表于 2019-10-18 17:15 | 只看该作者
为了让你们能看懂
回复

使用道具 举报

6#
ID:332444 发表于 2019-10-18 17:27 | 只看该作者
可以显式写逻辑表达式,也可以使用默认值0表示假大于0都表示真,2种都是一样,写任何一种形式没一定要求,或许前复制的或许后自写的,这个根本就不必细究。
回复

使用道具 举报

7#
ID:235200 发表于 2019-10-18 18:48 | 只看该作者
逻辑上是一样的,可能编译后产生的代码有差别,至于专家为什么这么写,估计是每一个人的编程习惯不一样,也许当初未想清楚,但对于精度不高的时候影响看不出来,你这两个程序应该不是出自一个专家
回复

使用道具 举报

8#
ID:616759 发表于 2019-10-18 20:29 | 只看该作者
帮你的代码调试了下,Delay_B_ms(3)和Delay_A_ms(3)都执行了三次取反,所以你的结论是对的哦,unsigned int的范围是0~255,所以m--到0就不可以了,即等于0的时候就停止自减,和上面的那个不等于0是一样的
回复

使用道具 举报

9#
ID:382454 发表于 2019-10-19 06:50 来自手机 | 只看该作者
俺就是看不懂专家写的啊,有点抽。所以才问大家,可能俺太菜了!喔喔!!!
回复

使用道具 举报

10#
ID:626474 发表于 2019-10-19 09:05 | 只看该作者
这是循环停止的意思,如果直接添1就会陷入无限循环了,加!=0为了根据个人需求来停止循环
回复

使用道具 举报

11#
ID:434308 发表于 2019-10-19 14:28 | 只看该作者
每个程序员的打码习惯不一样
回复

使用道具 举报

12#
ID:611461 发表于 2019-10-19 14:43 | 只看该作者
while( (ms--) != 0) :while是个循环语句,满足括号里的条件执行循环,当条件不满足时会跳出循环,里面小括号是传递的参数,让他循环递减,没减一次需要耗费一定的时间,!=这个表示不等于,就是ms不等于0时执行循环里面的语句,当他等于0时就会跳出循环,执行其他语句
回复

使用道具 举报

13#
ID:40861 发表于 2019-10-19 16:15 | 只看该作者
好好学习天天向上
回复

使用道具 举报

14#
ID:627436 发表于 2019-10-21 10:46 | 只看该作者
第一种写法为了让新手能看明白吧
回复

使用道具 举报

15#
ID:296956 发表于 2019-10-21 15:43 | 只看该作者
一样的, 实际编译可能会代码优化一样。
回复

使用道具 举报

16#
ID:360555 发表于 2019-10-21 17:20 | 只看该作者
逻辑是一样的
回复

使用道具 举报

17#
ID:628308 发表于 2019-10-22 16:31 | 只看该作者
一样的,while本身就是0的时候不循环1的时候才循环
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表