Зачем использовать вместо _Bool?

В любое время, когда мне понадобился тип Boolean, мне сказали либо создать один, либо еще лучше использовать stdbool.h .

Поскольку stdbool.h использует typedef bool _Bool , есть ли причина использовать заголовок вместо использования типа _Bool ? Это просто для дополнительных макросов ( /* #define true 1 #define false 0 */ )?

Очевидным типом для добавления в язык был bool . Но, к сожалению, было написано много кода, который включал bool в другие формы и формы. Напомним, что поддержка булевского типа была добавлена ​​только в C99.

Поэтому у C-языкового комитета не было выбора, кроме как вытащить для него зарезервированный идентификатор ( _Bool ). Но, поскольку очевидный выбор имени типа по-прежнему остается неизменным, добавлен stdbool.h чтобы дать пользователям очевидное имя. Таким образом, если в вашем коде не было домашнего bool , вы можете использовать встроенный в него.

Так что действительно используйте stdbool.h если вы не привязаны к существующему домашнему bool . Он будет стандартным типом, со всеми преимуществами, которые вводит тип.

Обычная практика всегда заключалась в использовании bool но когда тип был официально введен в стандарт C99, они не хотели нарушать реализацию «roll-your-own». Таким образом, они сделали тип _Bool как хак вокруг неофициальных bool s. Теперь нет столкновения имени типа. Во всяком случае, укажите, используйте bool если не устареет устаревшая кодовая база.

Они такие же. bool – псевдоним для _Bool . До использования C99 мы не имели этого типа. (Раньше использование ограничивалось целым числом с 0 как ложным, а 1 – истинным).

Вы не можете его использовать. Даже вы можете undef bool (но рекомендуется не делать этого). Но включая его ( stdbool.h и bool alias of _Bool ) хорошо, потому что тогда, если когда-нибудь он будет зарезервирован, ваш код будет соответствовать этому. 1

1. Вы можете использовать bool другим способом, но лучше не делать этого. Поскольку в целом, когда этот stdbool.h введен, он несет план постепенного превращения его в стандартное, а затем еще более строгое правило применяется там, где мы не можем использовать bool как что-то другое, и оно будет зарезервировано как ключевое слово .