¿Bool es un tipo C nativo?
Me di cuenta de que el código del kernel de Linux usa bool, pero pensé que bool era del tipo C++. ¿Bool es una extensión C estándar (por ejemplo, ISO C90) o una extensión GCC?
bool
existe en el actual C - C99, pero no en el C89/90.
En C99, el tipo nativo en realidad se llama _Bool
, mientras que bool
es una macro de biblioteca estándar definida en stdbool.h
(que se espera que se resuelva en _Bool
). Los objetos de tipo _Bool
contienen 0 o 1, mientras que true
y false
también son macros de stdbool.h
.
Tenga en cuenta, por cierto, que esto implica que el preprocesador de C interpretará #if true
que #if 0
a menos que stdbool.h
esté incluido. Mientras tanto, se requiere el preprocesador de C++ para reconocerlo de forma nativa true
como un lenguaje literal.
C99 agregó un _Bool
tipo de datos incorporado (consulte Wikipedia para obtener más detalles) y, si lo desea #include <stdbool.h>
, se proporciona bool
como una macro para _Bool
.
Preguntaste sobre el kernel de Linux en particular. Asume la presencia _Bool
y proporciona un bool
typedef en include/linux/types.h .
C99 lo tiene en stdbool.h , pero en C90 debe definirse 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) { ... }
No, no existe bool
en ISO C90.
Aquí hay una lista de palabras clave en C estándar (no en 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 que analiza algunas otras diferencias con C tal como se usa en el kernel y el estándar: http://www.ibm.com/developerworks/linux/library/l-gcc-hacks/index.html