> 「真偽値は 0 とそれ以外」という原則について、実際に他人のコードをみると
> これを無視した書き方が結構みられます。「(真偽値) == true」とか。
本当に true (小文字)だったのであれば、そして(真偽値)がbool型であれば、
C++のboolならば(不正なキャストなどしなければ)trueかfalseしかありえないので、
「(bool型の値) == true」は一概に問題がある/無視しているとは言えないです。
# とはいえ、あまりお勧めはしませんが。
一方、C言語の場合やWin32のBOOLでは、「0とそれ以外」が一般的なので、
「(BOOL型の値) == TRUE」だったら一般によくないコードだと言っていいと思います。
# もちろん、特定のケースで問題なく動くものだとしても、作法として。
CとC++は一緒に考えるべきでない/区別して考えた方がよいのでは、と思います。
返信をありがとうございます。
・ C に bool はない
そうだったのですか(汗。
知りませんでした。ご指摘に感謝します。
これまで使った環境が C/C++ 両対応であったことと、基礎勉強はほとんどなしで
実践投入だった事などもあり、このような基本的なところにまだ穴がありそうな
気がしてきました。ちょっと調べてみます。
・ (真偽値) == true
これまで思考の基本が BOOL だったため、== TRUE のつもりで書いていました。
失礼しました。
なぜか私のまわりは BOOL の真偽値にしても先のように書かないと
気の済まない人たちばかりだったようで。「 TRUE は 1 だけど真は 0 以外を
指すから危ないよ」と言っても聞き入れてくれませんでした。
が、ご指摘のような true のつもりで TRUE を使用していたなら、勘違いはあるにしても
ある程度は解るかもしれません。TRUE を使用している時点で間違いではあるのですが。
>CとC++は一緒に考えるべきでない/区別して考えた方がよいのでは、と思います。
肝に銘じます。
> 気の済まない人たちばかりだったようで。「 TRUE は 1 だけど真は 0 以外を
ちなみに、シャノンさんも触れられていますが、
Win32でのTRUEが1なのはあくまでWin32の場合であって、
その界隈以外では「~0 / 0xFFFFFFFF / -1」等になっている場合もあります。
このあたりも歴史的経緯というか、あくまで0か!0な所以です。
あうあう。
心得ました。ご指摘、ありがとうございます。