Бросьте взгляд на gpw инструмент . Пакет также доступен в репозиториях Debian/Ubuntu.
_Bool
- это встроенный тип, поэтому не ожидайте найти его определение в заголовочном файле, даже в системном заголовочном файле.
Сказав это, угадывая вашу систему по поисковым путям, смотрели ли вы в / usr / lib / gcc / * / * / include
?
Мой "настоящий" stdbool.h
живет здесь. Как и ожидалось, #define
s bool
должно быть _Bool
. Поскольку _Bool
является собственным типом компилятора, для него нет определения в заголовочном файле.
В качестве примечания:
_Bool определен в C99. Если вы создаете свою программу с помощью:
gcc -std=c99
, вы можете ожидать, что она будет там.
Другие люди ответили на вопрос о местоположении _Bool
и выяснили, объявлен ли C99. .. однако я не удовлетворен заявлением всех, сделанным самими собой.
Почему вы не можете полностью определить тип?
typedef enum { false, true } bool;
$ echo '_Bool a;' | gcc -c -x c -
$ echo $?
0
$ echo 'bool a;' | gcc -x c -c -
<stdin>:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘a’
Это демонстрирует, что _Bool
является встроенным типом, а bool
- нет, путем компиляции объявления одной переменной без включения.
_Bool
- это предопределенный тип в C99, очень похожий на int
или double
. Вы также не найдете определения для int
ни в одном заголовочном файле.
Вы можете сделать
_Bool
int
или unsigned char
) Например:
#if defined __STDC__ && defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
/* have a C99 compiler */
typedef _Bool boolean;
#else
/* do not have a C99 compiler */
typedef unsigned char boolean;
#endif