Стандартная библиотека C<stdbool.h>
До стандарта C99 целочисленные типы (такие какint)для представления логических значений. Например,0обозначает false, ненулевые значения (обычно1) обычно использовались в C для представления true. Этот подход, хотя и был возможен, не обладал интуитивностью и типобезопасностью. Чтобы решить эту проблему, стандарт C99 ввёлstdbool.hзаголовочный файл, который определяет логический тип и связанные макросы.
<stdbool.h>— стандартный заголовочный файл в C, который определяет булев тип и связанные с ним константы. Он делает булев тип в 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 <stdbool.h>
int main() {
// Объявление логической переменной
bool isReady = true;
bool isFinished = false;
// Использование логической переменной
if (isReady) {
printf("Система готова.\n");
} else {
printf("Система не готова.\n");
}
if (!isFinished) {
printf("Задача не завершена.\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 <stdbool.h>
int main() {
bool flag = true; // Использовать тип bool
if (flag) {
printf("Флаг истинен.\n");
} else {
printf("Флаг ложен.\n");
}
return 0;
}
В приведённом выше примере flag — логическая переменная с начальным значением true. Проверьте, равно ли flag значению true, затем выведите соответствующее сообщение.
Макросы true и false
true и false — предопределённые макросы, соответствующие логическим значениям 1 и 0 соответственно, и их можно использовать напрямую в условиях:
Пример
#include <stdbool.h>
int main() {
bool is_logged_in = false;
// Изменить логическое значение
if (!is_logged_in) {
is_logged_in = true;
printf("Пользователь вошёл в систему: %s\n", is_logged_in ? "true" : "false");
}
return 0;
}
Используется в сочетании с такими операторами, как if и while
Логические типы полезны в управляющих структурах, таких как if, while и for:
Пример
#include <stdbool.h>
int main() {
bool condition = false;
while (!condition) {
printf("Условие ложно.\n");
condition = true; // Изменить condition на true
}
return 0;
}
Здесь цикл while будет продолжать выполняться, пока condition не станет true.
Совместимость между логическим типом и целыми числами
Хотя сам тип bool является отдельным типом, на уровне внутренней реализации он обычно опирается на целочисленный тип (обычно int). Поэтому true можно считать равным 1, а false — 0.
Однако при программировании следует избегать смешивания логических значений с обычными целыми числами и стараться сохранять ясность и читаемость типов.
Пример
#include <stdbool.h>
int main() {
bool is_active = true;
// Неправильный подход: смешивание логических значений с целыми числами
int status = is_active; // Эта строка компилируется нормально, но её лучше избегать.
if (status) {
printf("Статус истинен.\n");
} else {
printf("Статус ложен.\n");
}
return 0;
}
Хотя приведённый выше код выполняется корректно, так делать не рекомендуется, потому что он смешивает логические значения и целочисленные типы, что затрудняет понимание кода.
Преимущества логического типа
- Читаемость: Использование
boolТип делает намерение программы более ясным по сравнению с использованиемintТип представляет true или false,boolТип может явно указывать, что переменная используется только для представления булева значения. - Стандартизация:
<stdbool.h>Он предоставляет стандартный способ обработки булевых значений, избегая сложности использования макросов или целочисленных типов для представления булевых значений. - Безопасность типов: с
intТип отличается,boolТип специально используется для логических проверок, уменьшая проблемы несоответствия типов.