visual tipos que ejemplo dim booleanas bool c gcc linux-kernel boolean

que - tipos de variables en visual basic



¿Es bool un tipo C nativo? (11)

He notado que el código del kernel de Linux usa bool, pero pensé que bool era un tipo de C ++. ¿Es bool una extensión C estándar (por ejemplo, ISO C90) o una extensión GCC?


C99 agregó un tipo bool cuya semántica es fundamentalmente diferente de las de casi todos los tipos de enteros que existían antes en C, incluidos los tipos de extensión de compilador y definidos por el usuario destinados a tales fines, y que algunos programas pueden tener "definición de tipo" ed to bool .

Por ejemplo, dado bool a = 0.1, b=2, c=255, d=256; , el tipo bool C99 establecería los cuatro objetos en 1. Si un programa C89 utilizara typedef unsigned char bool , los objetos recibirían 0, 1, 255 y 0, respectivamente. Si usó char , los valores podrían ser los anteriores, o c podría ser -1. Si hubiera usado un bit extensión de compilador o __bit tipo de __bit , los resultados probablemente serían 0, 0, 1, 0 (tratar el bit de una manera equivalente a un campo de bit sin signo de tamaño 1, o un tipo entero sin signo con un valor poco).


C99 agregó un tipo de datos _Bool (consulte Wikipedia para obtener detalles), y si #include <stdbool.h> , proporciona bool como macro a _Bool .

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


C99 define bool, true y false en stdbool.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 hay tal cosa, probablemente solo una macro para int


No, no hay bool en ISO C90.

Aquí hay una lista de palabras clave en el estándar C (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 que describe algunas otras diferencias con C como se usa en el núcleo y el estándar: http://www.ibm.com/developerworks/linux/library/l-gcc-hacks/index.html



bool existe en la C - C99 actual, pero no en 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 tienen 0 o 1, mientras que true y false también son macros de stdbool.h .


stdbool.h define macros verdadero y falso, pero recuerde que se definió como 1 y 0.

Es por eso que sizeof(true) es 4.


_Bool es una palabra clave en C99: especifica un tipo, como int o double .

6.5.2

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


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