Enum列挙タイプの詳細
2491 ワード
1.列挙の定義列挙タイプ定義の一般形式は以下の通りである.
Enum列挙名{列挙値テーブル};
使用可能なすべての値を列挙値テーブルにリストします.これらの値は列挙要素とも呼ばれます.
たとえば、この列挙名はweekdayで、列挙値は7つ、すなわち1週間の7日間です.weekdayタイプ変数として説明される値は、7日間のいずれかにすぎません.
2.列挙変数の説明構造と結合のように、列挙変数も異なる方法で説明することができる.すなわち、先に定義してから説明し、同時に説明を定義したり、直接説明したりすることができる.
変数a,b,cは上述のweekdayとして説明され、以下のいずれかの態様を採用することができる.
enum weekday{ sun,mou,tue,wed,thu,fri,sat };
enum weekday a,b,c;
あるいは:enum weekday{sun,mou,tue,wed,thu,fri,sat}a,b,c;
あるいはenum{sun,mou,tue,wed,thu,fri,sat}a,b,c;
列挙タイプは使用中に以下の規定がある:1.列挙値は定数であり、変数ではありません.プログラムに付与文を使用して値を付与することはできません.
例えばweekdayを列挙する要素には、sun=5;mon=2; sun=mon; すべて間違いです.
2.列挙要素自体は、システムによってシーケンス番号を表す数値が定義され、0から順に0、1、2...と定義されます.weekdayではsun値が0,mon値が1,...,sat値が6である.
説明:列挙値には列挙変数しか与えられず、要素の数値には直接列挙変数を与えることはできません.
例えば、a=sum;b=mon; 正しいです.一方、a=0;b=1; 間違いです.列挙変数に数値を付与するには、強制タイプで変換する必要があります.
例えば、a=(enum weekday)2;シーケンス番号2の列挙要素に列挙変数aを付与することを意味し、a=tueに相当する.
また、列挙要素は文字定数でも文字列定数でもないので、単、二重引用符を付けないでください.
VSでコンパイルするには、次のコードを見てください.
Enum列挙名{列挙値テーブル};
使用可能なすべての値を列挙値テーブルにリストします.これらの値は列挙要素とも呼ばれます.
たとえば、この列挙名はweekdayで、列挙値は7つ、すなわち1週間の7日間です.weekdayタイプ変数として説明される値は、7日間のいずれかにすぎません.
2.列挙変数の説明構造と結合のように、列挙変数も異なる方法で説明することができる.すなわち、先に定義してから説明し、同時に説明を定義したり、直接説明したりすることができる.
変数a,b,cは上述のweekdayとして説明され、以下のいずれかの態様を採用することができる.
enum weekday{ sun,mou,tue,wed,thu,fri,sat };
enum weekday a,b,c;
あるいは:enum weekday{sun,mou,tue,wed,thu,fri,sat}a,b,c;
あるいはenum{sun,mou,tue,wed,thu,fri,sat}a,b,c;
列挙タイプは使用中に以下の規定がある:1.列挙値は定数であり、変数ではありません.プログラムに付与文を使用して値を付与することはできません.
例えばweekdayを列挙する要素には、sun=5;mon=2; sun=mon; すべて間違いです.
2.列挙要素自体は、システムによってシーケンス番号を表す数値が定義され、0から順に0、1、2...と定義されます.weekdayではsun値が0,mon値が1,...,sat値が6である.
main()
{
enum weekday
{
sun,
mon,
tue,
wed,
thu,
fri,
sat
}a,b,c;
a=sun;
b=mon;
c=tue;
printf("%d,%d,%d",a,b,c);
}
説明:列挙値には列挙変数しか与えられず、要素の数値には直接列挙変数を与えることはできません.
例えば、a=sum;b=mon; 正しいです.一方、a=0;b=1; 間違いです.列挙変数に数値を付与するには、強制タイプで変換する必要があります.
例えば、a=(enum weekday)2;シーケンス番号2の列挙要素に列挙変数aを付与することを意味し、a=tueに相当する.
また、列挙要素は文字定数でも文字列定数でもないので、単、二重引用符を付けないでください.
// VS ,
// GCC ,
main(){
enum body
{ a,b,c,d } month[31],j;
int i;
j=a;
for(i=1;i<=30;i++){
month[i]=j;
j++; // VS
if (j>d) j=a;
}
for(i=1;i<=30;i++){
switch(month[i])
{
case a:printf(" %2d %c/t",i,'a'); break;
case b:printf(" %2d %c/t",i,'b'); break;
case c:printf(" %2d %c/t",i,'c'); break;
case d:printf(" %2d %c/t",i,'d'); break;
default:break;
}
}
printf("/n");
}
VSでコンパイルするには、次のコードを見てください.
enum body
{ a,b,c,d } month[31],j;
int i;
j=a;
for(i=1;i<=30;i++)
{
month[i]=j;
j = (enum body)(j + 1); // ,
if (j>d) j=a;
}
for(i=1;i<=30;i++)
{
switch(month[i])
{
case a:printf(" %2d %c/t",i,'a'); break;
case b:printf(" %2d %c/t",i,'b'); break;
case c:printf(" %2d %c/t",i,'c'); break;
case d:printf(" %2d %c/t",i,'d'); break;
default:break;
}
}
printf("/n");