C 列挙型 新しいページはコチラ
提供: yonewiki
(→列挙型) |
|||
121行: | 121行: | ||
− | + | 列挙型変数への代入は列挙子でしか代入できません。したがって列挙子を指定してもよい関数でありながら数値で指定してもよい関数がこの世の中にはたくさんあることから、列挙子を使える関数の中身はどちらの型を引数にとってもよいような作りになっていることになります。 | |
+ | |||
+ | |||
+ | 基本的に列挙子は、先頭から0が割り当てられint型の数値として、列挙変数へ数値を代入されていますので、enum型は4バイトの整数を保持する変数となっています。プログラム中でenum 列挙名型{…};とすることでユーザー指定型の型を作ったことになりますので、列挙子はプログラム中で新しい型として処理されます。プログラム処理系(C#とか)によっては列挙子の先頭は1からだったりします。列挙子に割り当てられる整数値は先頭の番号を変更することもできますし、途中からまた番号の割り振り直しを指定することもできます。 | ||
+ | |||
+ | |||
+ | 列挙子の最初の番号を65536に変更する場合は | ||
+ | <syntaxhighlight lang="text"> | ||
+ | enum enumAction{ | ||
+ | ACTION_STOP = 65536, | ||
+ | ACTION_START, | ||
+ | ACTION_PAUSE, | ||
+ | ACTION_RECORD, | ||
+ | ACTION_RESTART, | ||
+ | ACTION_NEXTCHAPTER, | ||
+ | ACTION_PREVCHAPTER | ||
+ | }; | ||
+ | </syntaxhighlight> | ||
+ | とすることで65536~65542までが順番に各列挙子の数値として割り振られます。 | ||
+ | |||
+ | |||
+ | 列挙子の最初の番号を再度ふりなおす場合は | ||
+ | <syntaxhighlight lang="text"> | ||
+ | enum enumAction{ | ||
+ | ACTION_STOP, | ||
+ | ACTION_START, | ||
+ | ACTION_PAUSE, | ||
+ | ACTION_RECORD, | ||
+ | ACTION_RESTART, | ||
+ | ACTION_NEXTCHAPTER, | ||
+ | ACTION_PREVCHAPTER | ||
+ | ACTION_STOP2 = 0, | ||
+ | ACTION_START2, | ||
+ | ACTION_PAUSE2, | ||
+ | ACTION_RECORD2, | ||
+ | ACTION_RESTART2, | ||
+ | ACTION_NEXTCHAPTER2, | ||
+ | ACTION_PREVCHAPTER2 | ||
+ | }; | ||
+ | </syntaxhighlight> | ||
+ | のように列挙子の記述の途中で…ACTION_STOP2 = 0,…のような記述を挟むことで、番号のふりなおしがされます。すべての列挙子に数値を指定して列挙子を作成することもできます。すべて列挙子に数字を指定するということは、順番に割り振られる列挙型のシステムを使うかどうかの違いだけになります。何度でも振り直しができるため、列挙子がもつ数字が重複することは、すごく当然のように許されています。 | ||
+ | |||
+ | |||
+ | 列挙型の変数はポインタとして扱われることもありますので、そのあたりの応用が必要になることもありますが、通常のポインタ操作となんらかわらないため、詳細は[[C ポインタ|ポインタ]]の項目を参照して下さい。 |