わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

ブール型は列挙型?

昨日の授業で,typedefによる型定義,enumを使った列挙型,そして構造体を説明しました.

enum Boolean {FALSE, TRUE};

これで,enum Boolean型を定義することになります.Boolean型ではありません*1
FALSEとTRUEは,ともに列挙子と呼ばれます*2.でも「列挙子(れっきょし)」なんて言葉は覚えなくていいでしょう.そういえば,受験英語で「doの名詞形はdeed」と覚えたけど,大学の英語にも,英語の論文にも出てきたことがありません(ただし,辞書を引けば,それなりに用例が載っているので,私の範囲で見たことがないというだけです).
ところで,真偽値を扱うには,いつもこういうふうに型を定義しておかないといけないのかというと,決してそうではありません.
まず,C++という言語では,bool型があります.
そして,Cの中でも,C99という規格*3では,真偽値を扱うための型として「_Bool」が新設されています.さらに,「#include 」を書いておけば,bool型が利用できます.
結局,列挙型を自作するか,C++やC99を使うか,あるいはブール型を使わずに「0」と「1」を使うことにするかは,メリット・デメリットに注意して,プログラムを書く状況に応じて一つを選ぶことになります.すでに書いたプログラムに,bool型を取り入れるときは,あらかじめソースコードにbool,true,falseという変数や定数がないことを確認しましょう*4

*1:http://www1.kcn.ne.jp/~robe/cpphtml/html03/cpp03012.html によると,無名列挙型が作れるとのこと.

*2:「列挙定数」ともいいます.

*3:通常,Cの入門の授業で採用している規格は,「ANSI C」とか,略して「ANSI」とか,「C89」とか呼ばれます.

*4:確認するには,GNOME端末などを起動し,ソースファイルがあるディレクトリに移動してから,「grep -i bool *.c」とします.boolを,trueやfalseに置き換えて実行するとより確実です.