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.