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

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

Ответ 1

bool существует в текущем C - C99, но не в C89/90.

В C99 нативный тип на самом деле называется _Bool, а bool - стандартный библиотечный макрос, определенный в stdbool.h (который, как ожидается, разрешается до _Bool). Объекты типа _Bool содержат либо 0, либо 1, а true и false также являются макросами из stdbool.h.

Ответ 2

C99 добавил встроенный тип данных _Bool (подробнее см. Wikipedia), и если вы #include <stdbool.h>, он предоставляет bool в качестве макроса до _Bool.

Вы спрашивали о ядре Linux в частности. Он предполагает наличие _Bool и предоставляет bool typedef непосредственно в include/linux/types.h.

Ответ 3

Нет, в ISO C90 нет bool.

Здесь список ключевых слов в стандарте C (не C99):

  • auto
  • break
  • case
  • char
  • const
  • continue
  • default
  • do
  • double
  • else
  • enum
  • extern
  • float
  • for
  • goto
  • if
  • int
  • long
  • register
  • return
  • short
  • signed
  • static
  • struct
  • switch
  • typedef
  • union
  • unsigned
  • void
  • volatile
  • while

Здесь обсуждаются некоторые другие отличия от C, используемые в ядре и стандарте: http://www.ibm.com/developerworks/linux/library/l-gcc-hacks/index.html

Ответ 4

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) { ... }

Ответ 5

/* 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. */

Ответ 6

_Bool - это ключевое слово в C99: он задает тип, точно так же, как int или double.

6.5.2

2 Объект, объявленный как тип _Bool достаточно велика, чтобы сохранить значения 0 и 1.

Ответ 7

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

Ответ 8

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

Ответ 9

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

Ответ 10

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

Вот почему sizeof(true) равно 4.