2013/07/04

C++のBOOL型について

BOOL frog = -1;
この frogはどういう状態かと言うと
「偽でない」かつ「真でもない」という値になっている。じゃあ誰なんだお前は、と。
if(frog == TRUE) ← NO!!
if(frog == FALSE) ← NO!!
お前BOOLじゃねーのかよとw カエルかよとw

C/C++の常識だけどBOOL型というのは数値の「1」がTRUEで「0」がFALSEで if文では「0」以外は全部TRUE判定(だったかな?)になる。
実際は真を期待して「if(frog)」とか逆に「if(!frog)」って書くことが多いから問題にはなることは少ないが、frogが実は「frog != FALSE」なのにif文では偽「frog != TRUE」なのにif文では真、となる値となることを知ってないと混乱する(逆に書いてた)。
Javaから入ったプログラマにこの言語壊れてる、と思われてもしょうがないんではないか…

無駄な抵抗だと思いますが、BOOL型、TRUE、FALSEは一切使わずbool型、true、falseを使うようにしてます。しかしbool型に数値を代入出来たり、true、falseを1、0の数値として使えてしまうので完ぺきではありません…

Cで良く見る「if(!somePtr){/* ぬるぽ */}」というNULLチェックは「ポインタも実は数値」なことと「数値が真偽値として使える」ことと「NULLがFALSEと同じ0で定義されてる」ことを利用して行われてます。
酷い方法だと思いますw
無駄な抵抗だと思いますが自分で書く場合だけは「if(somePtr == NULL){/* ぬるぽ */}」 としてます。(無駄ジャンと言われて消されるような気もしますが…)

0 件のコメント:

コメントを投稿