論理値の型について – 固定ページ 2 – プログラミング – Home

通知
すべてクリア

[解決済] 論理値の型について

固定ページ 2 / 2

Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

> 「真偽値は 0 とそれ以外」という原則について、実際に他人のコードをみると
> これを無視した書き方が結構みられます。「(真偽値) == true」とか。

本当に true (小文字)だったのであれば、そして(真偽値)がbool型であれば、
C++のboolならば(不正なキャストなどしなければ)trueかfalseしかありえないので、
「(bool型の値) == true」は一概に問題がある/無視しているとは言えないです。
# とはいえ、あまりお勧めはしませんが。

一方、C言語の場合やWin32のBOOLでは、「0とそれ以外」が一般的なので、
「(BOOL型の値) == TRUE」だったら一般によくないコードだと言っていいと思います。
# もちろん、特定のケースで問題なく動くものだとしても、作法として。

CとC++は一緒に考えるべきでない/区別して考えた方がよいのでは、と思います。


返信引用
紅'
 紅'
(@紅')
ゲスト
結合: 17年前
投稿: 48
Topic starter  

返信をありがとうございます。

・ C に bool はない

 そうだったのですか(汗。
 知りませんでした。ご指摘に感謝します。

 これまで使った環境が C/C++ 両対応であったことと、基礎勉強はほとんどなしで
 実践投入だった事などもあり、このような基本的なところにまだ穴がありそうな
 気がしてきました。ちょっと調べてみます。

・ (真偽値) == true

 これまで思考の基本が BOOL だったため、== TRUE のつもりで書いていました。
 失礼しました。

 なぜか私のまわりは BOOL の真偽値にしても先のように書かないと
 気の済まない人たちばかりだったようで。「 TRUE は 1 だけど真は 0 以外を
 指すから危ないよ」と言っても聞き入れてくれませんでした。

 が、ご指摘のような true のつもりで TRUE を使用していたなら、勘違いはあるにしても
 ある程度は解るかもしれません。TRUE を使用している時点で間違いではあるのですが。

>CとC++は一緒に考えるべきでない/区別して考えた方がよいのでは、と思います。

 肝に銘じます。


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

> 気の済まない人たちばかりだったようで。「 TRUE は 1 だけど真は 0 以外を

ちなみに、シャノンさんも触れられていますが、
Win32でのTRUEが1なのはあくまでWin32の場合であって、
その界隈以外では「~0 / 0xFFFFFFFF / -1」等になっている場合もあります。
このあたりも歴史的経緯というか、あくまで0か!0な所以です。


返信引用
紅'
 紅'
(@紅')
ゲスト
結合: 17年前
投稿: 48
Topic starter  

あうあう。
心得ました。ご指摘、ありがとうございます。


返信引用
固定ページ 2 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました