MISRA CとかC99とか、あるいはブールシット

MISRA CとかC99といった、C言語の標準化とか、こう書け的なスタイルの話で、非常に多くの議論の蓄積があることを発見しつつある。

例えばマクロよりinline関数使えよという議論がある。関数なら型チェックができるとか、返り値が渡せることとか、関数に渡す値にうっかり式を指定してもオッケーだとか、そんな議論があるようだ。逆にinline関数よりもマクロを使うメリットが良く分からない。あれこれ手元にあるソースコードgrepしてみても、あまりinline関数が使われているらしき形跡がないけど、なんでだろうか。C89の後方互換のためか?

C99にBoolean型があると知って驚いた。いろいろとコードを見ていて、どうもbool func(int hoge)というのがあるなとは思っていたけど、それは勝手に#defineしてるんだと思っていた。そうではなくて、stdbool.hがあるのか。gccだとCのところは、

#define bool    _Bool
#define true    1
#define false   0

となってる。システム定義っぽい_Boolはintなのかcharなのか良く分からん。

ともあれ、こういうときに、Wikipediaは役立つもので、ブーリアン型の解説を読むと、各言語でのブーリアン値の扱いが良く分かる。

どうでもいいけど、George Booleの名前からBooleanという形容詞が出てくるのは分かるけど、それが名詞形になるときにbooleではなくboolとeが落ちた歴史的経緯って何だろうか。スペリングの整合性からみんなbooleと書きたくなかったからとか? Booleanが一般化した後に自然発生的に名詞形が逆成したということだろうか。

と思って検索してみたら、どうもboolというのも中世以前のイギリスで使われていた古い姓らしい。雄牛のbullから来ていて、肉体強靭であることとか、牛飼いを生業としていた人たちを表していたのじゃないか、という説が(http://www.surnamedb.com/surname.aspx?name=Bool)。ということは、ブール代数とかいうと算数が得意そうな感じだけど、ブルシットというときのブルと同じブルってことだ。日本の姓だったら牛島代数ぐらいのもんか。あ、ブルシットなウンチク系になってもうた。

http://c-faq.com/というのがあって、これは読もうと思ったとメモ。