大家好,我是電源漫談,很高興和各位一起分享我的第68篇原創(chuàng)文章,喜歡和支持我的工程師,一定記得給我點(diǎn)贊、收藏、分享。
枚舉類型是經(jīng)常在代碼中看到的變量類型,本文通過簡要介紹及測試,解析一下這種類型的變量的基本概念。
一.枚舉類型的概念
首先看一下枚舉類型的概念,一般來說,枚舉類型是一個(gè)用戶創(chuàng)建的有限范圍的整數(shù)類型,本質(zhì)上一個(gè)整數(shù)int數(shù)據(jù)類型,但是它僅僅包含一些指定的值的列表,而這些值都用符號常量來表示。同樣的,類似于其它變量類型的定義,這些符號常量會和那些具有同樣類型的枚舉變量一起使用。
二.創(chuàng)建枚舉類型及變量
具體如何創(chuàng)建一個(gè)枚舉類型呢?我們可以創(chuàng)建一個(gè)有序列表的常數(shù)表,這個(gè)常數(shù)表中每一個(gè)常數(shù)標(biāo)簽值都比前一個(gè)值大1,第一個(gè)數(shù)據(jù)是0,這是默認(rèn)的情況。
圖1 枚舉類型語法定義
圖2 枚舉類型的示例
如上圖2的示例中,我們定義了一個(gè)weekday這樣一個(gè)枚舉變量,其中包含七個(gè)常數(shù)標(biāo)簽,SUN,MON,TUE,WED,THR,FRI,SAT這七個(gè)常數(shù)標(biāo)簽。默認(rèn)情況下,它們的值為從0到6的整數(shù)。
實(shí)際上這里有一種特殊情況,任何一個(gè)常數(shù)標(biāo)簽,都可以指定為一個(gè)具體的值,而后面跟隨的標(biāo)簽都會在此基礎(chǔ)上順序增加1,如圖3所示。
圖3 特殊指定常數(shù)標(biāo)簽的值
接下來,我們再說一下枚舉變量的定義的方式,一般可以和枚舉類型一起寫,也可以單獨(dú)去寫變量的定義,如下圖4參考。
圖4 枚舉變量的定義方式
圖5 變量定義的方式示例
上圖中示例中,第一個(gè)例子是定義變量和定義類型放在一起方式,第二個(gè)例子是在定義了類型后,就像普通變量一樣,單獨(dú)定義了變量。
圖6 不寫類型名直接定義變量名的方式
在實(shí)際使用枚舉類型時(shí),也可以不寫類型名,但是這種情況需要將類型定義和變量定義放在一起寫。
圖7 變量的值的使用
當(dāng)定義了枚舉類型,以及枚舉變量后,對于變量的值可以直接使用任何已經(jīng)包含進(jìn)去的常數(shù)符號,當(dāng)然也可以使用具體的整數(shù),這個(gè)在代碼中都是識別的,如圖7所示。
三.枚舉變量實(shí)測
這里我們定義一個(gè)枚舉變量FilterType,及定義一個(gè)枚舉變量filter,代碼中其它部分功能,由于篇幅所限,我們此處不詳述。
圖8 定義枚舉類型及變量
圖9 調(diào)試代碼查看常數(shù)標(biāo)簽
將枚舉變量filter賦值一個(gè)常數(shù)標(biāo)簽,HIGHPASS,我們在調(diào)試結(jié)果中查看其值。
圖10 常數(shù)標(biāo)簽的值的顯示
在上述結(jié)果中,我們可以看出HIGHPASS的值為2,BANDSTOP,LOWPASS,HIGHPASS,BANDPASS的值相應(yīng)為0,1,2,3滿足期望的定義。
此處將filter變量定義為HIGHPASS時(shí),filter=HIGHPASS;
則可以在串口窗口中得到如下結(jié)果。
圖11 HIGHPASS打印輸出
將filter變量定義為LOWPASS時(shí),filter=LOWPASS;
則可以在串口窗口中得到如下結(jié)果。
圖12 LOWPASS打印輸出
以上結(jié)果均符合代碼設(shè)置,通過switch case打印了相關(guān)的枚舉常數(shù)值。
前述部分,我們提到用戶可以直接指定常數(shù)標(biāo)簽的值,這里我們也測試一下。
圖13 靈活定義常數(shù)標(biāo)簽的值
圖14 調(diào)試代碼查看枚舉標(biāo)簽常數(shù)值
圖15 常數(shù)標(biāo)簽值的查看
通過調(diào)試窗口,我們可以看到,人為定義PAUL為4,則BILL為5,人為定義GARY為7,則WEB和BABY為8及9,符合期望的定義,第一個(gè)數(shù)據(jù)ROB還是0.
總結(jié),使用枚舉的好處,可以讓代碼的可讀性更好,更方便維護(hù),當(dāng)需要增加額外的常數(shù)表標(biāo)簽值時(shí),可以直接在常數(shù)枚舉類型列表中增加,而不用更改其它部分的代碼。