Bool est-il un type C natif?

J’ai remarqué que le code du kernel Linux utilise bool, mais je pensais que bool était un type C ++. Est-ce que bool est une extension C standard (par exemple, ISO C90) ou une extension GCC?

    bool existe dans le C-C99 actuel, mais pas dans le C89 / 90.

    En C99, le type natif s’appelle en réalité _Bool , alors que bool est une macro de bibliothèque standard définie dans stdbool.h (qui se résout probablement en _Bool ). Les objects de type _Bool contiennent 0 ou 1, alors que true et false sont également des macros de stdbool.h .

    C99 a ajouté un type de données _Bool _Bool (voir Wikipedia pour plus de détails), et si vous #include , il fournit bool comme macro à _Bool .

    Vous avez posé des questions sur le kernel Linux en particulier. Il suppose la présence de _Bool et fournit un bool typedef lui-même dans include / linux / types.h .

    Non, il n’y a pas de bool dans ISO C90.

    Voici une liste de mots-clés dans la norme C (pas 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

    Voici un article traitant d’ autres différences avec C tel qu’il est utilisé dans le kernel et la norme: http://www.ibm.com/developerworks/linux/library/l-gcc-hacks/index.html

    C99 l’a dans stdbool.h , mais en C90 il doit être défini comme un typedef ou un enum:

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

    Alternativement:

     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 est un mot-clé dans C99: il spécifie un type, comme int ou double .

    6.5.2

    2 Un object déclaré comme type _Bool est suffisamment grand pour stocker les valeurs 0 et 1.

    C99 définit bool, true et false dans stdbool.h .

    stdbool.h a été introduit dans c99

    Pas une telle chose, probablement juste une macro pour int

    stdbool.h définit les macros true et false, mais rappelez-vous qu’il est défini sur 1 et 0.

    C’est pourquoi sizeof(true) est 4.