Стандарт языка 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