<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                【78.1 typedef和#define和enum。】 typedef稱為“類型定義”,#define稱為“宏定義”,enum稱為“枚舉”。三者都有“一鍵替換”的能力,但是應用的側重點各有不同。請看下面的例子,要寫一個函數,把學生的分數分為3個等級,第1等級是“優”(范圍:“優”>=90分),第2等級是“中”(范圍:70分<=“中”<90分),第3等級是“差”(范圍:“差”<70分),實現此算法的函數需要一個輸入口和一個輸出口,用來輸入分數和輸出判斷結果,判斷的結果用三個數字常量0,1,2來表示,0代表“優”,1代表“中”,2代表“差”。代碼如下: unsigned char GetGrade(unsigned char u8Score) { if(u8Score<70) { return 2; //2代表“差” } else if(u8Score>=70&&u8Score<90) { return 1; //1代表“中” } else { return 0; //0代表“優” } } 上述代碼沒有添加任何“typedef,#define,enum”,是“素顏照”級別的原始代碼。現在對上述代碼做一些美容,加入“typedef,#define,enum”的元素,代碼如下: \#define BAD\_MEDIUM 70 //宏定義。用BAD\_MEDIUM來表示“差”和“中”分數的分界線 \#define MEDIUM\_GOOD 90 //宏定義。用MEDIUM\_GOOD來表示“中”和“優”分數的分界線 typedef unsigned char u8; //用typedef為類型“unsigned char”增加一個名為“u8”的代言人 enum {GOOD = 0,MEDIUM,BAD}; //用enum把“0,1,2”三個常量轉換為“GOOD,MEDIUM,BAD” u8 GetGrade(u8 u8Score) { if(u8Score<BAD\_MEDIUM) //等級分數分界線的判斷 { return BAD; //BAD就是常量2,代表“差”。 } else if(u8Score>=BAD\_MEDIUM&&u8Score<MEDIUM\_GOOD) //等級分數分界線的判斷 { return MEDIUM; //MEDIUM就是常量1,代表“中” } else { return GOOD; //GOOD就是常量0,代表“優” } } 代碼賞析: 賞析片段一: \#define BAD\_MEDIUM 70 //宏定義。用BAD\_MEDIUM來表示“差”和“中”分數的分界線 \#define MEDIUM\_GOOD 90 //宏定義。用MEDIUM\_GOOD來表示“良”和“優”分數的分界線 這里,用宏定義#define來關聯分界線判斷的分數,給后續代碼的升級維護帶來了便捷,因為用戶有可能會要求把“差”“中”“優”三者的分數線進行調整,這時直接更改70和90這個數值就可以實現分數線的調整。可見,宏定義#define經常用在涉及“分界線”判斷的場合。 賞析片段二: typedef unsigned char u8; //用typedef為類型“unsigned char”增加一個名為“u8”的代言人 用類型定義typedef為類型“unsigned char”增加一個名為“u8”的代言人,u代表unsigned的u,8代表此類型占用8位,比如unsigned char就是占用8位的unsigned類型,所以用u8。如果是16位的unsigned類型就用u16,32位則用u32,這都是單片機界的常用命名習慣。上述代碼用了類型定義,今后代碼中凡是想定義一個unsigned char變量,都可以直接用u8來替代。這樣有兩個好處:第一個好處,u8的字符個數明顯比unsigned char少,省了敲代碼的力氣。第二個好處,方便代碼在各種不同硬件平臺上的移植,因為不同的單片機不同的編譯器對unsigned char,unsigned int,unsigned long翻譯所得的結果是不一樣的,比如,51單片機的unsigned int是占用16位的,而很多32位單片機的unsigned int是占用32位的,它們的16位則用unsigned short int類型,而不是unsigned int。 當我們用51單片機寫代碼的時候,可以如下類型定義: typedef unsigned char u8; typedef unsigned int u16; typedef unsigned long u32; 當我們用32位的單片機寫代碼的時候,可以如下類型定義: typedef unsigned char u8; typedef unsigned short int u16; typedef unsigned int u32; 這樣,當我們想把51單片機的代碼移到32位的單片機上時,只需要修改類型定義typedef這部分的代碼,就可以快速做到代碼在不同編譯器平臺上的類型兼容。 賞析片段三: enum {GOOD = 0,MEDIUM,BAD}; //用enum把“0,1,2”三個常量轉換為“GOOD,MEDIUM,BAD” 用枚舉enum把“0,1,2”三個常量轉換為“GOOD,MEDIUM,BAD”英文單詞,最大的好處就是方便代碼的閱讀和修改。再多補充一點枚舉的基礎知識,上述代碼中,第一個英文單詞GOOD,經過“GOOD = 0”這條初始化的語句后,等效于常量0,后面的MEDIUM和BAD則C編譯器自動對它們進行“累加1”排序,所以MEDIUM和BAD分別為常量1,2,這是C語言的語法規則。枚舉enum的應用側重在某些涉及到“狀態”的數據類型,但是也不絕對。 【78.2 enum和typedef的相結合。】 enum一旦搭載上typedef后,可以把各自的特性發揮得淋漓盡致,產生另外一種常見的用途,那就是“人造”數據類型的用途,這里的“人造”解讀為“人為制造”之意。比如上述78.1的函數u8 GetGrade(u8 u8Score),輸出接口接收的是u8類型,但是內部return返回的是枚舉類型的“GOOD,MEDIUM,BAD”其中之一,而u8雖然也能接收和兼容常量“GOOD,MEDIUM,BAD”,但是總是感覺有點“類型不匹配”的“不適感”,如果想消除這點“不適感”,可以用enum和typedef相結合的辦法,修改后代碼如下: \#define BAD\_MEDIUM 70 //宏定義。用BAD\_MEDIUM來表示“差”和“中”分數的分界線 \#define MEDIUM\_GOOD 90 //宏定義。用MEDIUM\_GOOD來表示“良”和“優”分數的分界線 typedef unsigned char u8; //用typedef為類型“unsigned char”增加一個名為“u8”的代言人 typedef enum { GOOD = 0, MEDIUM, BAD } Grade; //通過typedef 和enum的相結合,“人造”出一個新的數據類型 Grade。 Grade GetGrade(u8 u8Score) //這里返回的類型是Grade,而“GOOD,MEDIUM,BAD”就是屬于Grade { if(u8Score<BAD\_MEDIUM) //等級分數分界線的判斷 { return BAD; //BAD就是常量2,代表“差”。 } else if(u8Score>=BAD\_MEDIUM&&u8Score<MEDIUM\_GOOD) //等級分數分界線的判斷 { return MEDIUM; //MEDIUM就是常量1,代表“中” } else { return GOOD; //GOOD就是常量0,代表“優” } } 【78.3 例程練習和分析。】 為了熟悉typedef,#define,enum的用法,現在要寫一個函數,把學生的分數分為3個等級,第1等級是“優”(范圍:“優”>=90分),第2等級是“中”(范圍:70分<=“中”<90分),第3等級是“差”(范圍:“差”<70分),實現此算法的函數需要一個輸入口和一個輸出口,用來輸入分數和輸出判斷結果,判斷的結果用三個數字常量0,1,2來表示,0代表“優”,1代表“中”,2代表“差”。 /\*---C語言學習區域的開始。-----------------------------------------------\*/ \#define BAD\_MEDIUM 70 //宏定義。用BAD\_MEDIUM來表示“差”和“中”分數的分界線 \#define MEDIUM\_GOOD 90 //宏定義。用MEDIUM\_GOOD來表示“良”和“優”分數的分界線 typedef unsigned char u8; //用typedef為類型“unsigned char”增加一個名為“u8”的代言人 typedef enum { GOOD = 0, MEDIUM, BAD } Grade; //通過typedef 和enum的相結合,“人造”出一個新的數據類型 Grade。 Grade GetGrade(u8 u8Score); //函數聲明 Grade a; //“人造”出Grade類型的變量a,用來接收函數的判斷結果。 Grade b; //“人造”出Grade類型的變量b,用來接收函數的判斷結果。 Grade c; //“人造”出Grade類型的變量c,用來接收函數的判斷結果。 Grade GetGrade(u8 u8Score) //這里返回的類型是Grade,而“GOOD,MEDIUM,BAD”就是屬于Grade { if(u8Score<BAD\_MEDIUM) //等級分數分界線的判斷 { return BAD; //BAD就是常量2,代表“差”。 } else if(u8Score>=BAD\_MEDIUM&&u8Score<MEDIUM\_GOOD) //等級分數分界線的判斷 { return MEDIUM; //MEDIUM就是常量1,代表“中” } else { return GOOD; //GOOD就是常量0,代表“優” } } void main() //主函數 { a=GetGrade(98); //輸入98分,a來接收判斷的結果 b=GetGrade(88); //輸入88分,b來接收判斷的結果 c=GetGrade(68); //輸入68分,c來接收判斷的結果 View(a); //在電腦端觀察98分的判斷結果a View(b); //在電腦端觀察88分的判斷結果b View(c); //在電腦端觀察68分的判斷結果c while(1) { } } /\*---C語言學習區域的結束。-----------------------------------------------\*/ 在電腦串口助手軟件上觀察到的程序執行現象如下: 開始... 第1個數 十進制:0 十六進制:0 二進制:0 第2個數 十進制:1 十六進制:1 二進制:1 第3個數 十進制:2 十六進制:2 二進制:10 分析: 98分的判斷結果a為0,0代表“優”。 88分的判斷結果b為1,1代表“中”。 68分的判斷結果c為2,2代表“差”。 【78.4 如何在單片機上練習本章節C語言程序?】 直接復制前面章節中第十一節的模板程序,練習代碼時只需要更改“C語言學習區域”的代碼就可以了,其它部分的代碼不要動。編譯后,把程序下載進帶串口的51學習板,通過電腦端的串口助手軟件就可以觀察到不同的變量數值,詳細方法請看第十一節內容。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看