• ベストアンサー

C言語の enum の使い方

インターネットのサイトなどを利用してC言語を勉強しています。 いま一通り基本的な勉強が済んだところですが、enum というユーザー定義変数をどんな風に使えばよいのか、今ひとつわかりません。サンプルコードなどを見ても、 enum でなくても配列を使えば出来そうなものが多いのですが、この型の変数はどう使えば効果的なのでしょうか。 詳しい方、どうかよろしく教えてください。

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

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

>enum というユーザー定義変数を 変数ではないでしょう。 むしろ定数かと。 >enum でなくても配列を使えば出来そうなものが多いのですが 具体的になにがあります? ちなみに配列ではありませんので誤解なきよう。 http://homepage2.nifty.com/well/enum.html とか、いい感じに説明されていますかね。 defineだとただの置き換えなので何でも設定できてしまう。とか型チェックができない。とかの問題があります。 私自身、最近使ったやり方では…テーブルのインデックス用に使いましたね。

papashiroSooke
質問者

お礼

早速お返事いただきまして、ありがとうございます。 今までは説明を読んだだけでそう感じていたのですが、実際に enum を使って書かれたプログラムを配列で出来るかどうかやってみたところ、これがまったく難しいことであるということがわかりました。 下にそのプログラム例を挙げてみます。 #include <stdio.h> /* To shorten example, not using argp */ int main () { enum planets { Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto }; enum planets planet1, planet2; planet1 = Mars; planet2 = Earth; if (planet1 > planet2) puts ("Mars is farther from the Sun than Earth is."); else puts ("Earth is farther from the Sun than Mars is."); return 0; } このプログラムと同じ結果を、配列を使って出そうとしましたが、配列の要素である惑星の名前(文字列)からそのインデックスを求める必要があり、enum のように簡単ではないとわかりました。 正直に言いまして、enum は本当にざっと読みすごしただけでしたが、今回その効果の一端がわかったような気がします。 文字の並び(普通に言う文字列ではなくて)が決まった値を持っているというところがポイントなのでしょうね。 ご紹介頂いたサイトなどにも行って、また勉強したいと思います。

その他の回答 (1)

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

>サンプルコードなどを見ても、 enum でなくても配列を使えば出来そうなものが多いのですが、この型の変数はどう使えば効果的なのでしょうか。 配列にenumの変わりをさせるというのが全く想像できないんですが。 enumそのものを勘違いされていませんか? enumは、限定的な値を持つ型を定義するものなんですが。 enum POWER_STATUS { ON, OFF, }; とか。

papashiroSooke
質問者

お礼

早速お返事いただきまして、ありがとうございます。 回答者さんのおっしゃるとおり、enum をまったく勘違いしていたようです。 enum を使ったプログラムを配列で書けるというのは、今までそのようなものを自分で書いてそう感じていたということではなく、サンプルなどを見てそう感じていただけです。実際にやってみたところ、これがまったく難しいことであるということがわかりました。 下にそのプログラム例を挙げてみます。 #include <stdio.h> /* To shorten example, not using argp */ int main () { enum planets { Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto }; enum planets planet1, planet2; planet1 = Mars; planet2 = Earth; if (planet1 > planet2) puts ("Mars is farther from the Sun than Earth is."); else puts ("Earth is farther from the Sun than Mars is."); return 0; } このプログラムと同じ結果を、配列を使って出そうとしましたが、配列の要素である惑星の名前(文字列)からそのインデックスを求める必要があり、enum のように簡単ではないとわかりました。 正直に言いまして、enum は本当にざっと読みすごしただけでしたが、今回その効果の一端がわかったような気がします。 文字の並び(普通に言う文字列ではなくて)が決まった値を持っているというところがポイントなのでしょうね。