C 列挙型 新しいページはコチラ

提供: yonewiki
移動: 案内, 検索
(列挙型)
 
1行: 1行:
※このページではC言語にも存在していたという意味で記事タイトルがC ポインタになっていますが、<br />
+
[[C PlusPlus#Cにもあった技術|C++]]へ戻る
 +
 
 +
 
 +
※このページではC言語にも存在していたという意味で記事タイトルがC 列挙型になっていますが、<br />
 
[[C PlusPlus|C++]]でも同様です。[[C PlusPlus|C++]]だけの機能がある場合は明記します。<br />
 
[[C PlusPlus|C++]]でも同様です。[[C PlusPlus|C++]]だけの機能がある場合は明記します。<br />
 
<br />
 
<br />
 
== '''列挙型''' ==
 
== '''列挙型''' ==
 +
 
列挙型という名前自体が日本語としてもあまり使わない単語の型なので、なんともつかみどころのない型ですが、世界中のプログラマの中ではよく使われているという超人気の構文です。列挙って何?って感じですが、EnumrationとかEnumeratorといった単語を素直に日本語に訳したら列挙だったみたいな感じです。「(順序)番号割り当て型」くらいがちょうどよい日本語なのですが、これではあんまりにも幼稚な感じもあるというところなのかもしれません。
 
列挙型という名前自体が日本語としてもあまり使わない単語の型なので、なんともつかみどころのない型ですが、世界中のプログラマの中ではよく使われているという超人気の構文です。列挙って何?って感じですが、EnumrationとかEnumeratorといった単語を素直に日本語に訳したら列挙だったみたいな感じです。「(順序)番号割り当て型」くらいがちょうどよい日本語なのですが、これではあんまりにも幼稚な感じもあるというところなのかもしれません。
  
106行: 110行:
  
  
   enumActionSignal = 0;
+
   enumActionSignal = 0;//実際はこの代入は出来ない。
  
  
121行: 125行:
  
  
列挙型の変数はポインタとして扱われることもありますので、そのあたりの応用が必要になることもあります。
+
列挙型変数への代入は列挙子でしか代入できませんが、if文やswitch文などで列挙子以外の値と比較演算をすることは可能です。
 +
 
 +
 
 +
基本的に列挙子は、先頭から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,…のような記述を挟むことで、番号のふりなおしがされます。すべての列挙子に数値を指定して列挙子を作成することもできます。すべて列挙子に数字を指定するということは、順番に割り振られる列挙型のシステムを使うかどうかの違いだけになります。何度でも振り直しができるため、列挙子がもつ数字が重複することは、すごく当然のように許されています。
 +
 
 +
 
 +
また、列挙名型を宣言した範囲内であれば、列挙子が持つint型の整数値を格納することができるため、
 +
<syntaxhighlight lang="cpp" line start="1">
 +
#pragma once
 +
#include <iostream>
 +
 
 +
using namespace std;
 +
 
 +
int _tmain(int argc, _TCHAR* argv[]){
 +
  enum enumAction{
 +
    ACTION_STOP,
 +
    ACTION_START,
 +
    ACTION_PAUSE,
 +
    ACTION_RECORD,
 +
    ACTION_RESTART,
 +
    ACTION_NEXTCHAPTER,
 +
    ACTION_PREVCHAPTER
 +
  };
 +
  int nEnum;
 +
  nEnum = ACTION_STOP;
 +
 
 +
  printf("%d\n",nEnum);
 +
}
 +
</syntaxhighlight>
 +
と上記のように列挙子をint型の変数へ代入することができます。
 +
 
 +
 
 +
列挙型の変数はポインタとして扱われることもありますので、そのあたりの応用が必要になることもありますが、通常のポインタ操作となんらかわらないため、詳細は[[C ポインタ|ポインタ]]の項目を参照して下さい。
 +
 
 +
 
 +
[[C PlusPlus#Cにもあった技術|C++]]へ戻る

2017年5月29日 (月) 00:00時点における最新版



個人用ツール
名前空間

変種
操作
案内
ツールボックス