一膜眠、枚舉的作用
- 枚舉在c語言中其實(shí)是一些符號(hào)常量集。
- 直白的說:枚舉定義了一些符號(hào)凉袱,這些符號(hào)的本質(zhì)是int類型的常量傲宜,每個(gè)符號(hào)和一個(gè)常量綁定运杭。這個(gè)符號(hào)就表示一個(gè)自定義的識(shí)別碼,編譯器對(duì)枚舉的認(rèn)知就是符號(hào)常量所綁定的那個(gè)int類型的數(shù)字函卒。
- 枚舉中的枚舉值都是常量辆憔。
- 枚舉符號(hào)常量和其對(duì)應(yīng)的常量數(shù)字來說,數(shù)字不重要报嵌,符號(hào)才重要虱咧。符號(hào)對(duì)應(yīng)的數(shù)字只要彼此不相同即可,一般我們不明確指定這個(gè)數(shù)字锚国,讓編譯器自動(dòng)分配腕巡。從0開始依次增加。
#include <stdio.h>
enum return_value
{
ERROR=23,
RIGHT,
};
enum return_value func1(void)
{
enum return_value r1;
r1=ERROR;
return r1;
}
int main(void)
{
enum return_value r1=func1();
if (r1==FRIGHT)
{
printf("函數(shù)執(zhí)行正確.\n");
}
else
{
printf("函數(shù)執(zhí)行錯(cuò)誤.\n");
}
printf("ERROR.\n",ERROR); //0.23
return 0;
}
二血筑、c語言為何需要枚舉
- c語言可以沒有枚舉绘沉。使用枚舉其實(shí)就是對(duì)1,0這些數(shù)字進(jìn)行符號(hào)化編碼豺总。好處就是編程時(shí)可以不看數(shù)字只看符號(hào)车伞。符號(hào)的含義是顯然的,數(shù)字的含義需要文檔喻喳。
- 宏定義的目的是:不用數(shù)字而用符號(hào)另玖。從這可以看出宏定義和枚舉有內(nèi)在聯(lián)系。
- 宏定義和枚舉大部分的時(shí)候是可以替換的沸枯。
#include <stdio.h>
//宏定義解決返回值問題
#define ERRPR 0
#define RIGHT 1
int func2(void)
{
return ERROR;
}
int main(void)
{
r1=func2();
if (r1==FRIGHT)
{
printf("函數(shù)執(zhí)行正確.\n");
}
else
{
printf("函數(shù)執(zhí)行錯(cuò)誤.\n");
}
return 0;
}
三日矫、枚舉和宏定義的區(qū)別
- 枚舉是將多個(gè)有關(guān)聯(lián)的符號(hào)封裝在一個(gè)枚舉中,宏定義是完全散的绑榴。枚舉其實(shí)是多選一哪轿。
- 當(dāng)我們要定義的常量是一個(gè)有限集合時(shí),最適合使用枚舉翔怎。
- 定義的常量符號(hào)之間無關(guān)聯(lián)窃诉,或者個(gè)數(shù)是無限的杨耙。
總結(jié)
- 宏定義先出現(xiàn),后來發(fā)現(xiàn)符號(hào)常量之間彼此之間有多選一的關(guān)聯(lián)飘痛。用宏定義做不貼切珊膜,于是發(fā)明了枚舉這種數(shù)據(jù)結(jié)構(gòu)。
四宣脉、枚舉的定義和使用
- 枚舉中的元素實(shí)質(zhì)是全局變量车柠。
- 枚舉和枚舉之間元素不能重名。