カテゴリー「C言語」の記事

C言語:TRUEとFALSEの値

【課題】
以前どこかで次のようなCのコードを見たことがあります。

if (flag == TRUE) {
  処理1
}
else if (flag == FALSE) {
  処理2
}
else {
  処理3
}

ここで「処理3」は実行されることがあるのか?というのが今回のエントリのテーマです。

【考察】
まず最初に,C言語におけるbooleanについての確認です。
Cのbooleanには2つの定義があります。

●booleanの定義その1:条件分岐の判定
if文,for文,while文など,値がtrueかfalseか判定して条件分岐を行う場合のtrue/falseの値については,Cの解説書に書かれていてよく知られています。falseは「0」,trueは「0以外」です。1,2,3…及び-1,-2,-3…はすべてtrueです。

●booleanの定義その2:比較演算子の演算結果
比較演算子の演算結果はtrue/falseのどちらかになりますが,Cでは元々boolean型がなく,この演算結果には数値が割り当てられます。
この数値の具体的な値を確認するには,たとえば以下のようなコードで確認できます。

int flag = (int)(a == b);

aとbに値を設定して,この変数flagにどのような値が入るかprintfで表示させるなどして確認してみましょう。

aとbが等しい場合,これは値が「1」になるはずです。「true」の値は「1」です。
aとbが等しくない場合,これは値が「0」になるはずです。「false」の値は「0」です。

●TRUEとFALSEの値は?
FALSEの値は0でいいでしょう。TRUEの値は実際の値を確かめてみると「1」が定義されています。
TRUEが1であることについては以下のような合理的理由があるかと思います。
1)定義1ではtrueの値は「0以外」だが,TRUEは特定の値にならざるを得ない。
2)定義2ではtrueの値は「1」なので,TRUEの値を「1」にすると定義2のtrueと直接比較できる。

【結論】
TRUEが1,FALSEが0であることから,最初のコードは以下のコードと同等です。

if (flag == 1) {
  処理1
}
else if (flag == 0) {
  処理2
}
else {
  処理3
}
ここでflagの値が0,1以外の値であった場合は処理3が実行されることがわかります。 結論としては処理3が実行されることはありうる,ということになります。

定義その1で条件判定する場合は,以下の書き方でなければならない,ということになるかと思います。

if (flag) {
  処理1
}
else {
  処理2
}

どうしてもTRUE/FALSEを使いたい,という場合は以下のように書くことになるかと思います。

if (flag != FALSE) {
  処理1
}
else {
  処理2
}


■関連書籍をAmazonで検索:[C言語]
C実践プログラミング 第3版

にほんブログ村 IT技術ブログへ にほんブログ村 IT技術ブログ プログラム・プログラマへ 人気ブログランキングへ ←この記事が役に立ったという方はクリックお願いします。
Bose SoundTrue in-ear headphones smartphone

| | トラックバック (0)