Un opérateur tel que ==
, !=
, &&
et ||
qui se traduit par une valeur booléenne sera évaluée à 1 de l'expression est vraie et 0 si l'expression est fausse. Le type de cette expression est int
. Par conséquent, si la macro TRUE
n'est pas définie comme 1
, une comparaison comme celle ci-dessus échouera.
Lorsqu'une expression est évaluée dans un contexte booléen, 0 est évalué à false et non à zéro à vrai. Donc, pour être sûr, TRUE
doit être défini comme:
#define TRUE (!0)
Comme mentionné dans les commentaires, si votre compilateur est conforme à C99, vous pouvez #include <stdbool.h>
et utiliser true
et false
.
Selon C99:
6.5.3.3 (opérateurs arithmétiques unaires)
Le résultat de l'opérateur de négation logique !
est de 0 si la valeur de son opérande compare pas égal à 0, 1 si La valeur de son opérande est égale à 0. Le résultat est de type int
. L'expression !E
est équivalente à (0==E)
.
6.5.8 (opérateurs relationnels)
chacun des opérateurs <
(inférieur), >
(supérieur à), <=
(inférieur ou égal à), et >=
(supérieure ou égal à) doit donner 1 si la relation spécifiée est vraie et 0 si elle est fausse. Le résultat a le type int
.
6.5.9 (opérateurs égalité)
Le ==
(égal à) et !=
opérateurs (pas égal à) sont analogues aux opérateurs relationnels à l'exception de leur priorité inférieure. Chacun des opérateurs cède 1 si la relation spécifiée est vraie et 0 si elle est fausse. Le résultat est de type int
.
6.5.13 (ET LOGIQUES)
L'opérateur &&
doit céder 1 si ses deux opérandes comparer différent de 0; sinon, il donne 0. Le résultat a le type int
.
6.5.14 (opérateur logique OU)
L'opérateur doit céder ||
1 si l'un de ses opérandes comparer différent de 0; sinon, il donne 0. Le résultat a le type int
.
il y a un type standard 'bool' avec des constantes'on' et' false' défini dans l'en-tête standard 'stdbool.h' depuis C99. –
Pour compléter ce que Eugene a dit, vous pouvez être intéressé par ce lien: http://fr.cppreference.com/w/c/types/boolean –
Merci. Je cherche en fait des faits argumentatifs pour 1) changer cette définition de TRUE, et 2) utiliser un compilateur compatible C99 (en ce moment, nous utilisons un C89 conforme) – JACH