Является ли bool родным типом C?


Я заметил, что код ядра Linux использует bool, но я думал, что bool был типом C++. Является ли bool стандартным расширением C (например, ISO C90) или расширением GCC?

10 223

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.

C99 определяет bool,true и false in stdbool.h.

stdbool.h был введен в c99

нет такой вещи, вероятно, просто макрос для int

stdbool.h определяет макросы true и false, но помните, что он определен как 1 и 0.

вот почему sizeof(true) в 4.