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