C言語標準(C89)はブール型を定義していないため、true と false を使用すると、以下のエラーが発生します:

infinite.c:5:12: error: use of undeclared identifier 'true'
    while (true) {

1 error generated.
make: *** [infinite] Error 1

C言語のマクロ定義を利用して設定できます:

//ブール型をマクロ定義 #define BOOL int #define TRUE 1 #define FALSE 0 //ブール変数を定義 BOOL flag = FALSE;

列挙型(enum)を使用して定義することもできます:

typedef enum { true=1, false=0 }bool;

例

#include <stdio.h> //n! を計算、nの値はmainで定義 int main(void) { int n = 10; //階乗を計算 int sum = 1; //階乗の結果を格納するために使用 typedef enum { true=1, false=0 }bool; bool flag = false; //階乗計算のフラグ int num = n; //ループ回数 while( !flag ) { sum = sum * (num--); //num=1のときループを終了 if( num == 1) { flag = true; } } printf ("%d の階乗値は %d\n", n, sum); return 0; }

出力結果は:

10的叠乘值为 3628800 

C99はさらにヘッダーファイル <stdbool.h> を提供しており、bool は _Bool を表し、true は 1 を表し、false は 0 を表します。stdbool.h をインクルードするだけで、ブール型を非常に便利に操作できます。

例

//stdbool.h をインクルードしてブール型を使用 #include <stdbool.h> #include <stdio.h> //n! を計算、nの値はmainで定義 int main(void) { int n = 10; //階乗を計算 int sum = 1; //階乗の結果を格納するために使用 bool flag = false; //階乗計算のフラグ int num = n; //ループ回数 while( !flag ) { sum = sum * (num--); //num=1のときループを終了 if( num == 1) { flag = true; } } printf ("%d の階乗値は %d\n", n, sum); return 0; }

出力結果は:

10的叠乘值为 3628800