C 標準ライブラリ<stdbool.h>

C99 標準より前では、C 言語では通常、整数型(たとえばint)を使用してブール値を表していました。たとえば、0偽を表し、非ゼロ値(通常は1)は真を表します。この方法でも機能しますが、直感性と型安全性に欠けています。この問題を解決するために、C99 標準ではstdbool.hヘッダーファイルを導入し、ブール型と関連マクロを定義しました。

<stdbool.h>C 言語の標準ヘッダーファイルであり、ブール型と関連する定数を定義しています。bool)はより明確で使用可能になり、整数(0 や 1 など)を使用してブール値を表す従来の方法を回避しました。

stdbool.hヘッダーファイルは以下の内容を定義しています:

  • bool:ブール型。ブール変数を宣言するために使用します。
  • true:真の値を表すマクロで、通常は1。
  • false:偽の値を表すマクロで、通常は0。
  • __bool_true_false_are_defined:マクロであり、次のことを示すために使用されます:trueとfalse定義されているかどうか。

これらのマクロの定義は次のとおりです。

#define bool _Bool
#define true 1
#define false 0
#define __bool_true_false_are_defined 1

bool は _Bool 型の別名です。

_Bool は C99 標準で導入されたネイティブ型であり、ブール値を表します。_Bool 型は 0 または 1 のみを保持できるため、論理値を格納するのに適しています。

#include <stdbool.h>

_Bool is_valid = 1;  // 也可以直接使用 _Bool 类型

C プログラムでブール型と関連マクロを使用するには、まずインクルードする必要があります<stdbool.h>ヘッダーファイル:

#include <stdbool.h>

bool is_raining = true;
bool is_sunny = false;

例

以下は、...を使用した<stdbool.h>簡単な例です:

例

#include <stdio.h>
#include <stdbool.h>

int main() {
    // ブール変数の宣言
    bool isReady = true;
    bool isFinished = false;

    // ブール変数の使用
    if (isReady) {
        printf("The system is ready.\n");
    } else {
        printf("The system is not ready.\n");
    }

    if (!isFinished) {
        printf("The task is not finished.\n");
    }

    // ブール変数の値
    printf("isReady: %d\n", isReady);       // 1 (true) を出力
    printf("isFinished: %d\n", isFinished); // 0 (false) を出力

    return 0;
}

出力結果:

The system is ready.
The task is not finished.
isReady: 1
isFinished: 0

bool 型

bool 型を使用してブール変数を定義します:

例

#include <stdio.h>
#include <stdbool.h>

int main() {
    bool flag = true;  // bool 型を使用

    if (flag) {
        printf("Flag is true.\n");
    } else {
        printf("Flag is false.\n");
    }

    return 0;
}

上記の例では、flag はブール型の変数で、初期値は true です。flag が true かどうかを判定し、対応するメッセージを出力します。

true と false マクロ

true と false は事前定義されたマクロで、それぞれブール値の 1 と 0 に対応し、条件判定で直接使用できます:

例

#include <stdio.h>
#include <stdbool.h>

int main() {
    bool is_logged_in = false;

    // ブール値を変更
    if (!is_logged_in) {
        is_logged_in = true;
        printf("User logged in: %s\n", is_logged_in ? "true" : "false");
    }

    return 0;
}
このコードでは、is_logged_in の初期値は false で、その後ロジック内で true に変更されます。

if や while などの文と組み合わせて使用する

ブール型は if、while、for などの制御構造で役立ちます:

例

#include <stdio.h>
#include <stdbool.h>

int main() {
    bool condition = false;

    while (!condition) {
        printf("The condition is false.\n");
        condition = true;  // 条件を真に変更
    }

    return 0;
}

ここでは、while ループは condition が true になるまで実行され続けます。

ブール型と整数の互換性

bool 型自体は専用の型ですが、内部実装では通常、整数型(通常は int)に依存しています。したがって、true は 1 と見なすことができ、false は 0 と見なすことができます。

ただし、プログラミング時にはブール値と通常の整数を混在させないようにし、型の明確性と可読性を保つように心がけるべきです。

例

#include <stdio.h>
#include <stdbool.h>

int main() {
    bool is_active = true;

    // 誤った方法:ブール値と整数を混在させる
    int status = is_active;  // この行は正常にコンパイルできますが、避けるのが最善です

    if (status) {
        printf("Status is true.\n");
    } else {
        printf("Status is false.\n");
    }

    return 0;
}

上記のコードは正しく実行されますが、ブール値と整数型を混在させており、コードが理解しにくくなるため、推奨されません。

ブール型の利点

  • 可読性:使用bool型はプログラムの意図をより明確にし、使用する場合と比べて、int型が真または偽を表す、bool型は、その変数がブール値のみを表すために使用されることを明確に示すことができます。
  • 標準化:<stdbool.h>ブール値を処理する標準的な方法を提供し、マクロや整数型を使用してブール値を表す複雑さを回避しました。
  • 型安全性:...とはint型が異なり、bool型は論理判断専用に使用され、型の不一致の問題を減らします。
その他の拡張