¿Bool es un tipo C nativo?

Resuelto asussex asked hace 15 años • 12 respuestas

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?

asussex avatar Oct 22 '09 23:10 asussex
Aceptado

boolexiste en el actual C - C99, pero no en el C89/90.

En C99, el tipo nativo en realidad se llama _Bool, mientras que booles una macro de biblioteca estándar definida en stdbool.h(que se espera que se resuelva en _Bool). Los objetos de tipo _Boolcontienen 0 o 1, mientras que truey falsetambién son macros de stdbool.h.

Tenga en cuenta, por cierto, que esto implica que el preprocesador de C interpretará #if trueque #if 0a menos que stdbool.hesté incluido. Mientras tanto, se requiere el preprocesador de C++ para reconocerlo de forma nativa truecomo un lenguaje literal.

AnT stands with Russia avatar Oct 22 '2009 16:10 AnT stands with Russia

C99 agregó un _Booltipo de datos incorporado (consulte Wikipedia para obtener más detalles) y, si lo desea #include <stdbool.h>, se proporciona boolcomo una macro para _Bool.

Preguntaste sobre el kernel de Linux en particular. Asume la presencia _Booly proporciona un booltypedef en include/linux/types.h .

Josh Kelley avatar Oct 22 '2009 16:10 Josh Kelley

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) { ... }
Rob avatar Oct 22 '2009 16:10 Rob

No, no existe boolen 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

BobbyShaftoe avatar Oct 22 '2009 16:10 BobbyShaftoe