
A 回答 (4件)
- 最新から表示
- 回答順に表示

No.4
- 回答日時:
1)enum{E1,E2}E;
タグ名は省略したenum(列挙)型を定義する。enum{E1,E2}型の変数Eを宣言する。
1)ではenum{E1,E2}型の変数Eを宣言してる。
2)typedef enum{e1,e2}e;
タグ名は省略したenum(列挙)型を定義する。enum{e1,e2}型を新しい型e型と定義する。
2)ではenum{e1,e2}型をeという新しい型で定義をしてる。変数の宣言は行われない。
1)の場合、関数の中で新しく変数宣言する場合
#include<stdio.h>
enum{E1,E2} E;
int main()
{
int …;
double …;
enum{E1,E2} a1;//enum{E1,E2}型の変数a1を新たに宣言
…;
return 0;
}
2)の場合
#include<stdio.h>
typedef enum{e1,e2}e;
int main()
{
int …;
double …;
e a1;//e型の変数a1を新たに宣言
…;
return 0;
}
2)の方がコーディング量が減って楽。
もし2)でtypedefしないと、
e a1;
の部分を
enum{e1,e2} a1;
と書かなければならない。
だから、関数の引数として用いたり、関数の中で新しく変数を宣言する場合は、長ったらしい列挙型の部分を、typedefを用いて新しい短い型名として定義しておいた方が楽じゃんって事
とゆー事で良いですか?
回答が的を得てるのかいまいち自信がないですけど
No.3
- 回答日時:
前者は無名enum型変数宣言であり、後者は別名型定義です。
使い分けるというものではなくて、そもそも効果が違います。enumについては5種類の書き方があり、
1) enum E { e1, e2 };
2) enum E { e1, e2 } v;
3) enum { e1, e2 } v;
4) typedef enum E { e1, e2 } Ea;
5) typedef enum { e1, e2 } Ea;
というものです。
(1)は標準的な"型定義のみの"記法です。
(2)は(1)の効果に加えて、変数宣言も同時に行うものです。このときvの型はEです。
(3)は変数宣言を行う記法です。このときはvの型は"無名"になり、プログラム中でvの型を記述することはできません。
(4)は型定義と型の別名宣言を同時に行う書式です。Eの別名Eaを宣言しています。これはenum Eと書かずにE2に書けるようにするためで、単に記述がしやすくなることを狙ったものです。
(5)は(4)から型の名前を除いたものです。enumのオリジナルの型は無名になってしまいますが、(3)と違い、E2として型名を参照できるので、プログラム中で無名型をE2として再利用することが出来ます。
No.2
- 回答日時:
ふつうに考えると Egame と Emusic は「別の型」だと思います。
可読性が悪くなったのは、本来別の型である Egame や Emusic を同じ型にしてしまったのが原因。だから、
typedef enum {
n64,
pstation
} Egame;
typedef enum {
jazz,
rock
} Emusic;
のように Egame や Emusic を定義して
Egame game = n64;
Emusic music = jazz;
と使うものでしょう。
No.1
- 回答日時:
struct と typedef struct の違いとにています。
すなわち、同じenumの型をもつ変数を複数定義するとき、あらかじめtypedefしておけば簡潔に書ける、ということです。
つまりプログラムの記述のしやすさに影響するのみで、生成されるコードに違いはありません。
この回答への補足
ありがとうございます。typedef structで思い出しました。
enum {
n64,
pstation
} Egame;
Egame = n64;
enum {
jazz,
rock
} Emusic;
Emusic = jazz;
…
if (Emusic == jass) {…
上記のような2つのenumの定義を下記のコードのようにするとスッキリするというものでしょうか?
下記のコードはスッキリしましたが、例えば
if (Emusic == E2) {…
の可読性については上記コードに劣るものになってしまいました。
もっとよい例がございましたら教えてください。
下記のコードの可読性の弱点を克服できる考えもございましたら教えてください。
typedef enum {
E1,
E2
} Entertainment;
Entertainment Egame, Emusic;
Egame = E1;
Emusic = E2;
…
if (Emusic == E2) {…
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
char*を初期化したいのですが
C言語・C++・C#
-
enumについて
C言語・C++・C#
-
構造体のメンバをfor文で回したい
C言語・C++・C#
-
-
4
C言語での引数の省略方法
C言語・C++・C#
-
5
正負を反転させて出力するプログラム
C言語・C++・C#
-
6
charでの計算?
C言語・C++・C#
-
7
外部依存関係について
C言語・C++・C#
-
8
戻り値で構造体を返すことは可能でしょうか?
C言語・C++・C#
-
9
ファイルやディレクトリの存在確認を行う方法
C言語・C++・C#
-
10
配列の要素数に変数を入れたいときには
C言語・C++・C#
-
11
構文エラー;"が型の前にありませんとは、どうしたら解決できるのですか。"
C言語・C++・C#
-
12
バッファとは何ですか
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
2重定義って??
-
DWORDの実際の型は何でしょうか
-
ハンドルされていない例外が発...
-
typedef enumの使い方を教えて...
-
【C++クラス設計】ある関数の引...
-
「Aに対するBの割合」と「Aに対...
-
Aの値からBの値を除するとは??
-
2曲同時再生するにはどうした...
-
ある商品のロス率を5%見込み、...
-
有効数字について 以前質問をし...
-
int16_t の _t は何?
-
fgetsについて
-
マイナスからプラスへ転じた時...
-
三角形の判別
-
プログラムでの数字につく”f”の...
-
std::set<int> で、ある値が何...
-
c言語で、繰り返し文の中で、0....
-
Excel VBAで、Application.Inpu...
-
C言語のwhile文を使った素数判...
-
火災保険の値上げについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
long型の定数の末尾にLを付ける...
-
main.c:7:43: warning: implici...
-
intとINTの違いは?
-
C++のfor文について
-
2重定義って??
-
void func( void )について
-
変数の型を定義しなかった場合...
-
C言語のコンパイルエラー
-
C++でboolにintの値を代入する...
-
ハンドルされていない例外が発...
-
構造体の要素すべてに対する四...
-
構造体の宣言でエラーが出ます。
-
プログラムの中で別のmainを呼...
-
[C++]メンバ関数の仮引数について
-
0除算を判定したい
-
プログラム、どのように書いて...
-
typedef enumの使い方を教えて...
-
enumについて
おすすめ情報