• ベストアンサー

列挙子集合を持つ列挙型を宣言する事にどんな意味があるのでしょうか?

列挙子集合を持つ列挙型を宣言しなくてもあまり意味がないような気がするのですがよければメリットやデメリットや使う意味等を教えてください

質問者が選んだベストアンサー

  • ベストアンサー
  • bugmaru
  • ベストアンサー率38% (76/195)
回答No.1

メリットと言えば、プログラムの可読性が良くなる事と、コーディング時点で 不用意に変な値を代入してしまう事を防げると言う事が上げられると思います。 プログラムの可読性に関しては、無秩序な列挙子を定義してしまえば、列挙型だから可読性が良くなると言い切れない部分はありますが、意味のある集合体であれば ある1つの列挙子を代入している個所を見れば、他にどんな値が列挙子として定義 されているか想定が付きやすいです。 もう1つの、コーディング時点で不用意な値...については、列挙型変数は、定義されている列挙子しか値の代入ができませんから、コーディング時に不正な代入を記述してしまった時、コンパイルエラーで引っかかる事です。 C言語の場合、文法的に合ってれば使い方が間違っていてもコンパイル通ってしまうので、バグの元となってその後のデバッグに苦労します。ですからコーディング時点でバグを出さない(出しにくい)コーディング手法が大事な言語ですから、そういう意味で列挙型は役に立ちます。 可読性やバグを出さないコーディング手法は他にも色々あると思いますので、 列挙型はオプションの1つだと考えれば良いのではないでしょうか。

その他の回答 (1)

  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.2

例えばエラーコードの定義。 100番台がメモリエラー、200番台がファイルエラー…と定義する仮定します。 if (status == 101) { なんの事かわかりません if (status == EMemoryFull) { メモリが足りないということがわかります。 これだけだと#defineで充分なのですが、列挙型だと enum { EMemory = 100, EMemoryFull, EBadHandle, EEmptyHandle, ... EFile=200, ... }; という宣言が出来ます。 メモリエラーが増えすぎてファイルエラーを300番台にズラさなくてはいけなくなったときでも EFile=200, の部分を EFile=300, とするだけでオッケーです。 使い慣れるとメチャクチャ便利です。

関連するQ&A