Является ли 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и предоставляетbooltypedef сам в включить / 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