¿Es bool un tipo nativo de C?

Me di cuenta de que el código de kernel de Linux usa bool, pero pensé que bool era de tipo C ++. ¿Es bool una extensión C estándar (p. Ej., ISO C90) o una extensión GCC?

bool existe en la stream C – C99, pero no en C89 / 90.

En C99, el tipo nativo se llama realmente _Bool , mientras que bool es una macro de biblioteca estándar definida en stdbool.h (que se espera que se _Bool en _Bool ). Los objetos de tipo _Bool mantienen 0 o 1, mientras que true y false también son macros de stdbool.h .

C99 agregó un tipo de datos _Bool incorporado (ver Wikipedia para más detalles), y si #include , proporciona bool como macro en _Bool .

Preguntaste sobre el kernel de Linux en particular. Asume la presencia de _Bool y proporciona un bool typedef en include / linux / types.h .

No, no hay bool en ISO C90.

Aquí hay una lista de palabras clave en C estándar (no 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

Aquí hay un artículo discutiendo algunas otras diferencias con C como se usa en el kernel y el estándar: http://www.ibm.com/developerworks/linux/library/l-gcc-hacks/index.html

C99 lo tiene en stdbool.h , pero en C90 se debe definir como typedef o enum:

 typedef int bool; #define TRUE 1 #define FALSE 0 bool f = FALSE; if (f) { ... } 

Alternativamente:

 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 es una palabra clave en C99: especifica un tipo, al igual que int o double .

6.5.2

2 Un objeto declarado como tipo _Bool es lo suficientemente grande como para almacenar los valores 0 y 1.

C99 define bool, true y false en stdbool.h .

stdbool.h se introdujo en c99

Tal cosa, probablemente solo una macro para int

stdbool.h define las macros como verdaderas y como falsas, pero recuerda que se definió como 1 y 0.

Es por eso que sizeof(true) es 4.