新しいブログに引っ越ししました。本部ログのコメント・トラックバックの受付は終了しました。

C言語の TRUE/FALSE  2007年07月08日(日)
プログラムをしていると、真と偽の二つの値をとる型が欲しいときがあります。

真と偽は普通 TRUEとFALSEで表現します。

TRUE 真
FALSE 偽

真と偽のニ値しか取らないタイプの型です。

C言語にはそのような型はありませんので、みな勝手に作るわけです。
多くの場合 BOOL とか BOOLEAN という型名となります。
この定義もプログラマーの考え方などによりちょっと違ってくるのです。

定義例
#define TRUE (1==1)
#define FALSE (!TRUE)

定義例2
#define TRUE 1
#define FALSE 0

定義例3
#define FALSE 0
#define TRUE (!FALSE)

BOOLのtypedef も
int の人がいたり char (一番小さい型)だったりと様々。

このあたりのいいかげんさが、複数の人で開発したり、移植したりする際にバグの原因となったりするわけです。
特に条件判断をするところではよく間違いが起きます。


IPA 独立行政法人 情報技術処理推進機構 ソフトウェアエンジニアリングセンターで出している
組み込みソフトウェア 開発向けコーディング作法ガイド[C言語板]でも
R2.2.1 真偽を求める式の中で、真として定義した値と比較しない。
としています。


例として func1の戻り値が真であれば括弧内のコードを実行するソースコードの場合は


if(func1() != FALSE ){
;
}


if(func1() ){
;
}

× if(func1() != TRUE){
;
}

 ※func1()の真と TRUE が必ずしも一致するとは限らないため




私は最近 0,1を直接表現する方法に戻っています。
格納変数は isXXXXX と言う名前にします。
これはプログラミング作法という本から影響されました。



例えば以下のような関数があるとすると
int isCommandA( void );

関数の実行結果が OKであれば 1 ,NGであれば 0 となります。

これだと TRUE/FALSE よりも分かりやすいと思います。

C言語の標準関数に isdigit()等の is系の関数があるので、特に説明しなくてもC言語プログラマには直感で理解していただけるのではないかと思います。

もっとも is系の関数は 真であれば 0以外の数が戻り値となるとあるので、
×
if( 1 == isCommandA()){

}
という書き方は禁止です。


◆◆ 参考書籍 ◆◆






◆組み込み技術のエキスパート ビーコン
Posted at 15:17 | C言語 | この記事のURL | コメント(0) | トラックバック(0)

評価平均 (0.00)  評価数(0)
この記事を評価する

この記事のURL
http://blog.fideli.com/be-con/archive/46/0
トラックバック
この記事へのトラックバックURL
http://blog.fideli.com/be-con/tb_ping/46/-OQ3BKUCf9nxM3hH-dtfSQ8pXMyoA
 
コメントする
名前:
Email:
URL:
クッキーに保存

半角で入力してください(大文字・小文字の区別なし)。

文字が読みづらい場合はこちらをクリックしてください。

captcha
小文字 太字 斜体 下線 取り消し線 左寄せ 中央揃え 右寄せ テキストカラー リンク

コメント
プロフィール

sugawara
このたびブログを引っ越しました。それに伴い本ブログのコメント・トラックバックの新規の受付はやめています。 新ブログは 「ビーコン菅原の組み込みがらみ」 http://kkbecon.blog8.fc2.com/ となります。

http://blog.fideli.com/be-con/index1_0.rdf
カテゴリアーカイブ
最新記事
最新コメント
石田 麻希
ノートン先生やり方がちょっと (04/05)
最新トラックバック
おすすめ書籍

クリップ
<< 2012年10月 >>
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
リンク集
月別アーカイブ