enum與typedef enum的用法
一,兩者的用法
列舉型別定義用關鍵字enum標識,形式為:
enum 識別符號
{
列舉資料表
};
列舉資料(列舉常量)是一些特定的識別符號,識別符號代表什麼含義,完全由程式設計師決定。資料列舉的順序規定了列舉資料的序號,從0開始,依次遞增。
enum status
{
copy,
delete
};
列舉型別status僅有兩個資料,一個是copy,一個是delete,序號為0、1,代表複製與刪除。
enum status
{
copy=6,
delete
};
則copy的序號為6,delete的序號為7。
enum用來定義一系列巨集定義常量區別用,相當於一系列的#define xx xx,當然它後面的識別符號也可當作一個型別識別符號;typedef enum則是用來定義一個數據型別,那麼該型別的變數值只能在enum定義的範圍內取。兩者在這點上是沒有差別的。
二,一些說明
用enum定義的型別,只能在它的值域範圍內取。比如:
#include "stdafx.h"
enum led_type
{
led_off = 0,
led_half = 127,
led_on = 255,
};
void crake(led_type xx)
{
printf("%d /n",xx);
}
int _tmain()
{
crake(0);
crake(22);
crake(333);
return 0;
}
編譯時程式都會報錯:error C2664: 'crake' : cannot convert parameter 1 from 'int' to 'led_type'。儘管enum的型別值仍然是整形,但並不意味著它可以接受範圍外的整型數。(關於此問題,在Linux中,由別人驗證是可以編譯通過的。因為兩者的C編譯法則有差別)