Char или Int для логического значения в C?

Я обнаружил, что нет родного типа bool. Люди либо используют int, либо char - хотя кажется, что int может использоваться чаще, чем char? Это правда?

Мой первый импульс заключался в использовании char, поскольку это меньший тип данных, но что-то я пропустил? Является int лучше для булевых значений, и если да - почему?

Ответы

Ответ 1

Существует _Bool в C99 и bool, если вы включили stdbool.h.

Если у вас его нет (довольно современный компилятор), используйте int, это обычно самый быстрый тип. Экономия памяти при использовании char, вероятно, незначительна.

Ответ 2

Если вы используете достаточно современный компилятор C, вам просто нужно:

#include <stdbool.h>

У этого обычно есть макрос, например:

#define bool _Bool

который позволяет использовать C99 встроенный _Bool тип, где вам нужен bool.

Ответ 3

Существует собственный тип с именем _Bool (начиная с C99). В <stdbool.h> существует также #define, чтобы обеспечить bool как псевдоним, если вы хотите его (также имеет #define для true и false).

Ответ 4

На самом деле нет никакой реальной разницы, так как char всегда получает повышение до int при его использовании (отметьте this). Я никогда не видел, чтобы char использовался как bool, поэтому я пошел бы на использование int.

Ответ 5

В соответствии с ISO-9899 результат отношения, логические и равенства операторы имеют тип int. true и false из stdbool.h также являются целыми числами. Если вы хотите освободить память - используйте бит-поля.