08/06/10 23:50:18
>>83
実装効率を考えると真の際 TRUE 以外の値を返した方がいい場合もある。
TRUE しか返さない、としてしまうと、その効率のいい実装が取れなくなってしまう。
例えば is 系関数の戻り値を戻り値にしたい場合とか。
is 系関数はメモリ効率のため全ての関数で1つのテーブルを共有し、
ビット演算を使ってそれぞれの関数の戻り値を決めるよう実装されている場合がある。
int isalpha(int letter) { return table[letter] & 1; }
int isdigit(int letter) { return table[letter] & 2; }
int isalnum(int letter) { return table[letter] & 3; }
みたいな感じで。
こういう関数を戻り値に直接指定したい場合とか、0/1 にならないことがある。
そして、果たして BOOL の戻り値を作成する際に使った関数が
全て真偽を 0/1 で返すと確かめることはできるだろうか?
もしかしたら急に仕様が変えられるかもしれない。
それを考えて常に isalpha(ch) ? TRUE : FALSE のように書く事はできるかもしれないけど、
無駄も多いし書き忘れるミスを犯す事もあるだろう。
結局、bool 型のように true/false の2値性を保証する型で typedef されていない以上、
BOOL は 0/1 の2値性を保証しない方が安全ということになる。
TRUE や FALSE は真偽値を与える箇所で
条件式を書く事無くダイレクトに真か偽かを指定するために使う物であって、
比較に使う物ではない。
そもそも真偽値をさらに比較するという発想自体が
二度手間の無駄な発想としか言いようが無い。