Является ли bool родным типом C?
Я заметил, что код ядра Linux использует bool, но я думал, что bool был типом C++. Является ли bool стандартным расширением C (например, ISO C90) или расширением GCC?
10 ответов:
bool
существует в текущем C-C99, но не в C89/90.в C99 родной тип на самом деле называется
_Bool
, в то время какbool
- Это стандартный макрос библиотеки, определенный вstdbool.h
(который, как ожидается, решает_Bool
). Объекты типа_Bool
удерживайте 0 или 1, в то время какtrue
иfalse
также макросы отstdbool.h
.
C99 добавил встроенный
_Bool
тип данных (см. Википедия для деталей), и если вы#include <stdbool.h>
, это обеспечиваетbool
как макрос_Bool
.Вы спрашивали о ядре Linux в частности. Он предполагает наличие
_Bool
и предоставляетbool
typedef сам в включить / linux / типы.h.
нет
bool
в ISO C90.вот список ключевых слов в стандартном C (не статья обсуждает некоторые другое различия С C, используемые в ядре и стандарте:http://www.ibm.com/developerworks/linux/library/l-gcc-hacks/index.html
C99 имеет его в stdbool.h, но в C90 он должен быть определен как typedef или enum:
typedef int bool; #define TRUE 1 #define FALSE 0 bool f = FALSE; if (f) { ... }
кроме того:
typedef enum { FALSE, TRUE } boolean; boolean b = FALSE; if (b) { ... }
/* Many years ago, when the earth was still cooling, we used this: */ typedef enum { false = ( 1 == 0 ), true = ( ! false ) } bool; /* It has always worked for me. */
_Bool
является ключевым словом в C99: он определяет тип, так же, какint
илиdouble
.6.5.2
2 Объект, объявленный как тип _Bool достаточно большой, чтобы хранить значения 0 и 1.
stdbool.h был введен в c99