找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2324|回復(fù): 16
打印 上一主題 下一主題
收起左側(cè)

這個C語言函數(shù)有點不解,A與B應(yīng)該是一樣的吧?為什么專家要這樣寫呢?

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:382454 發(fā)表于 2019-10-18 15:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這個函數(shù)有點不解,A與B應(yīng)該是一樣的吧?   為什么專家要這樣寫呢?
就是 while( (ms--) != 0)這里  為什么要加個!=0呢????意義是什么?
下面的void Delay_B_ms(unsigned int ms)我執(zhí)行了一下,一樣的啊。

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. * 函 數(shù) 名       : main
  23. * 函數(shù)功能                 : 主函數(shù)
  24. * 輸    入       : 無
  25. * 輸    出             : 無
  26. *******************************************************************************/
  27. void main()
  28. {        
  29.         P0=~P0;
  30.         Delay_B_ms(3);
  31.         P0=~P0;        
  32.                
  33. }
復(fù)制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:195690 發(fā)表于 2019-10-18 16:11 | 只看該作者
意思就是延時那么長時間的機器周期,程序停在那里,當ms的值減到0的時候結(jié)束循環(huán),執(zhí)行后面的語句
回復(fù)

使用道具 舉報

板凳
ID:282850 發(fā)表于 2019-10-18 16:53 | 只看該作者
while( (ms--) != 0)是意思是:當ms,如初始ms=1000,自減1,為999,如果ms沒有=0,則一直反復(fù)自減,到0時跳出while。
回復(fù)

使用道具 舉報

地板
ID:621475 發(fā)表于 2019-10-18 17:05 來自手機 | 只看該作者
A,B的確一樣,但A并沒有調(diào)用
回復(fù)

使用道具 舉報

5#
ID:246215 發(fā)表于 2019-10-18 17:15 | 只看該作者
為了讓你們能看懂
回復(fù)

使用道具 舉報

6#
ID:332444 發(fā)表于 2019-10-18 17:27 | 只看該作者
可以顯式寫邏輯表達式,也可以使用默認值0表示假大于0都表示真,2種都是一樣,寫任何一種形式?jīng)]一定要求,或許前復(fù)制的或許后自寫的,這個根本就不必細究。
回復(fù)

使用道具 舉報

7#
ID:235200 發(fā)表于 2019-10-18 18:48 | 只看該作者
邏輯上是一樣的,可能編譯后產(chǎn)生的代碼有差別,至于專家為什么這么寫,估計是每一個人的編程習(xí)慣不一樣,也許當初未想清楚,但對于精度不高的時候影響看不出來,你這兩個程序應(yīng)該不是出自一個專家
回復(fù)

使用道具 舉報

8#
ID:616759 發(fā)表于 2019-10-18 20:29 | 只看該作者
幫你的代碼調(diào)試了下,Delay_B_ms(3)和Delay_A_ms(3)都執(zhí)行了三次取反,所以你的結(jié)論是對的哦,unsigned int的范圍是0~255,所以m--到0就不可以了,即等于0的時候就停止自減,和上面的那個不等于0是一樣的
回復(fù)

使用道具 舉報

9#
ID:382454 發(fā)表于 2019-10-19 06:50 來自手機 | 只看該作者
俺就是看不懂專家寫的啊,有點抽。所以才問大家,可能俺太菜了!喔喔!。
回復(fù)

使用道具 舉報

10#
ID:626474 發(fā)表于 2019-10-19 09:05 | 只看該作者
這是循環(huán)停止的意思,如果直接添1就會陷入無限循環(huán)了,加!=0為了根據(jù)個人需求來停止循環(huán)
回復(fù)

使用道具 舉報

11#
ID:434308 發(fā)表于 2019-10-19 14:28 | 只看該作者
每個程序員的打碼習(xí)慣不一樣
回復(fù)

使用道具 舉報

12#
ID:611461 發(fā)表于 2019-10-19 14:43 | 只看該作者
while( (ms--) != 0) :while是個循環(huán)語句,滿足括號里的條件執(zhí)行循環(huán),當條件不滿足時會跳出循環(huán),里面小括號是傳遞的參數(shù),讓他循環(huán)遞減,沒減一次需要耗費一定的時間,!=這個表示不等于,就是ms不等于0時執(zhí)行循環(huán)里面的語句,當他等于0時就會跳出循環(huán),執(zhí)行其他語句
回復(fù)

使用道具 舉報

13#
ID:40861 發(fā)表于 2019-10-19 16:15 | 只看該作者
好好學(xué)習(xí)天天向上
回復(fù)

使用道具 舉報

14#
ID:627436 發(fā)表于 2019-10-21 10:46 | 只看該作者
第一種寫法為了讓新手能看明白吧
回復(fù)

使用道具 舉報

15#
ID:296956 發(fā)表于 2019-10-21 15:43 | 只看該作者
一樣的, 實際編譯可能會代碼優(yōu)化一樣。
回復(fù)

使用道具 舉報

16#
ID:360555 發(fā)表于 2019-10-21 17:20 | 只看該作者
邏輯是一樣的
回復(fù)

使用道具 舉報

17#
ID:628308 發(fā)表于 2019-10-22 16:31 | 只看該作者
一樣的,while本身就是0的時候不循環(huán)1的時候才循環(huán)
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表