Почему поддержка булевого типа введена в C99, использует препроцессор, а не на собственные средства языка? В частности, почему у нас есть:

#define bool    _Bool
#define true    1
#define false   0

В <stdbool.h>, а не:

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

Я думаю, что Enum можно рассматривать как вопрос вкуса. Но - почему бы не иметь Typedef?

1
einpoklum 14 Мар 2018 в 15:26

1 ответ

Лучший ответ

Из раздела 7.18 / 3 из спецификации C11:

Остальные три макроса подходят для использования в директивах предварительной обработки #if .

Списки спецификаций true, false и __bool_true_false_are_defined.

В спецификации также продолжает утверждаться (в 7.18 / 4), что макросы bool, true и false могут быть не определены программой.

Последняя часть, о нетористых их, составляет (я думаю) из-за большого наследие, когда был опубликован C99, использовал свои собственные определения и вариации логических типов и ценностей. Так что он не будет недействительным существующим кодом. Таким образом, они являются макросами, поэтому их можно использовать в условиях препроцессора, и поэтому они могут быть не определены программой.

2
Some programmer dude 14 Мар 2018 в 17:05