
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# プログラムが書けません。 4 2023/01/22 22:57
- 工学 以前、線形代数からフーリエ級数展開を導く上で 式v=(v, e1)e1+(v, e2)e2+…+(v 6 2022/06/29 17:24
- 工学 ちなみになぜv=(v・e1)e1+(v・e2)e2はe1やe2が、正規直交基底でないと成り立たないと 2 2022/12/22 17:22
- Windows 10 VirtualBox 7のゲストOSでの物理HDDパーティションのマウント方法 2 2023/05/04 13:01
- Excel(エクセル) エクセルでのVBA 2 2022/08/03 06:48
- Excel(エクセル) 条件付き書式の色付きセルのカウント方法について 2 2022/10/21 14:51
- Excel(エクセル) Excel2007での条件付き書式について 6 2023/05/02 10:56
- 数学 「(((a0)/2)・1, 1) …(a0)/2の1倍と1の内積 =(a0)(1, 1) …1 と1 5 2022/07/05 19:11
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数のアドレスを関数から取得...
-
外部変数について
-
DWORDの実際の型は何でしょうか
-
値の受け渡しについて…
-
テンプレート引数の型を実行時...
-
C++でパラメータのやり取りでわ...
-
直接アドレス指定のポインタの...
-
DLLの明示的な呼び出し
-
クラスや構造体のarrayを作りた...
-
C言語のプログラムで...
-
構造体のサイズが意味不明の数...
-
int *a = new int; エラー
-
OpenGLで登録したコールバック...
-
C++の配列オブジェクトを宣言と...
-
vc2005.net 構造体の宣言について
-
関数の宣言と定義
-
とあるC++の参考書の疑問 ...
-
c言語について教えて下さい
-
【#define】 defineで定義した...
-
C言語で%を使わない余りの出し方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
long型の定数の末尾にLを付ける...
-
main.c:7:43: warning: implici...
-
2重定義って??
-
変数の型を定義しなかった場合...
-
C++でboolにintの値を代入する...
-
typedef enumの使い方を教えて...
-
C++のfor文について
-
intとINTの違いは?
-
【#define】 defineで定義した...
-
ハンドルされていない例外が発...
-
void func( void )について
-
C言語のコンパイルエラー
-
enumについて
-
関数の実体定義にヘッダファイ...
-
C言語 宣言した変数になにも代...
-
C++ クラスをメンバにもつクラ...
-
プログラムの中で別のmainを呼...
-
sshdログの意味
おすすめ情報