C言語でenumをtypedefして使う【列挙型】
目次
C言語でenumをtypedefする
C言語には「enum」という列挙型定数を定義するための文があります。
これを使うと定数を定義できます。
このenumをさらにtypedefすると列挙型定数の新しい型が作れます。
列挙型を新しい型にすることで列挙定数をその型の値として扱うことができるようになります。
具体的には↓のようにします。
typedef enum { ZERO, ONE, TWO, } Number;
この記事ではenumをtypedefする方法を具体的に解説します。
関連記事
C言語のenumはあなたの仕事を3倍効率的にします
普通のenumのおさらい
まず普通のenumですが、これは↓のように使います。
#include <stdio.h> enum Number { ZERO, ONE, TWO, }; int main(void) { enum Number n = ONE; int nn = TWO; printf("%d\n", n); printf("%d\n", nn); return 0; }
ZERO
とかONE
などが列挙型定数です。
この定数は「enum Number n = ONE;
」のように変数に入れておくことができます。
またint
型の整数にも「int nn = TWO;
」のように入れておけます。
これらは実際には型はint
になります。
ですのでprintf()
でも整数として出力することができます。
typedefしたenumについて
enumをtypedefした場合は↓のようになります。
#include <stdio.h> typedef enum { ZERO, ONE, TWO, } Number; int main(void) { Number n = ONE; int nn = TWO; printf("%d\n", n); printf("%d\n", nn); return 0; }
変数を定義する場合は
Number n = ONE;
となって「enum
」が無くなっています。
これはtypedefによって列挙型がNumber
という型になっているからです。
enumの実体は整数でした。
そのためこのtypedefしたNumber
も実体は整数になります。
整数型にNumber
という別名の型を付けているだけなんですね。
ですのでprintf()
でも整数として出力することができます。
typedefしたenumのサイズは?
typedefしたenumのサイズは何バイトになるのでしょうか?
これはsizeof()
演算子で確認できます。
#include <stdio.h> typedef enum { ZERO, ONE, TWO, } Number; int main(void) { printf("%ld\n", sizeof(Number)); // 4 return 0; }
結果は4バイトになりました。
これはint
型と同じバイト数です。
(ただしint
型のサイズは環境によって変わることがあります)
おわりに
今回はtypedefしたenumについて解説しました。
enumをtypedefするとコードがカッコ良くなりますよね。
なにか参考になれば幸いです。
(^ _ ^) | enumをtypedef! |
(・ v ・) | 型を作っちゃう! |