Il existe un type de données Arduino spécial et non standard appelé " boolean ".
Comment se compare-t-il avec le type de données C ++ standard " bool ", et quelles sont les raisons dutiliser lun ou lautre?
Sils sont identiques dans leur utilisation, pourquoi les deux existent-ils et lequel est préféré dans le code Arduino?
Commentaires
Réponse
Alors que les autres réponses donnent des informations généralement utiles, les auteurs semblent ne pas avoir lu la question très attentivement car ils parlent du type bool plutôt que du booléen type. Dans lAPI Arduino, boolean
est un alias de type pour bool
, tel que défini dans Arduino.h:
https://github.com/arduino/Arduino/blob/1.8.3/hardware/arduino/avr/cores/arduino/Arduino.h#L125
typedef bool boolean;
Vous pouvez donc utiliser le type boolean
comme vous le feriez bool
et toute référence de programmation C ++ standard vous expliquera lutilisation de bool
. Pour cette raison, les autres réponses qui se réfèrent à tort à bool
sont encore quelque peu utiles.
Apparemment, à un moment donné dans le passé, les gens dArduino ont décidé du nom boolean
serait plus convivial pour les débutants que bool
, peut-être pour être cohérent avec le langage de traitement . Cependant, comme indiqué ici:
https://github.com/arduino/Arduino/issues/4673
linutile lutilisation dun type non standard est maintenant considérée par certains comme une mauvaise décision car son utilisation rend le code moins portable et ne fournit vraiment aucun avantage clair par rapport à bool
. Une proposition est dans les travaux pour supprimer lutilisation de boolean
de tout le code officiel Arduino et document bool
dans la référence Arduino et certains souhaitent même formellement désapprouver boolean
. Mon conseil est donc dutiliser bool
au lieu de boolean
dans votre code.
Réponse
Un type de variable booléenne est celui qui na que 2 valeurs possibles, true
ou false
. En interne, il est créé en tant que int
(entier 16 bits) ou uint8_t
type (entier 8 bits).
Vous pouvez attribuer le « val ues « de true
ou false
à laide de lopérateur daffectation:
bool foo; foo = true; if (foo) { do_something(); }
En interne, un true
est un 1
et un false
est un 0
, et les valeurs numériques pourraient être également substituées.
Les types booléens dans Arduino et C ++ existent principalement pour la lisibilité, et non pour une efficacité particulière sur le type int
.
Réponse
La référence officielle peut être trouvée ici
Il est préférable de utilisez toujours vrai et faux, et nutilisez pas de nombres.
Ci-dessous quelques exemples sont donnés
Attribuez false resp true à un booléen:
bool a = true; bool b = false;
Vérifiez la valeur booléenne:
if (b) { // Executed when b is true } else { // Executed when b is false } if (a && b) { // Executed when a is true and b is true } if (a || b) { // Executed when a is true or b is true }
Si b est faux, a sera faux, sinon a restera tel quel
a &= b;
Si b est vrai, a sera vrai, sinon a restera tel quel
a |= b;
// Si a est vrai, ce sera faux et vice versa.
a = !a;
Commentaires
- Ce dernier devrait être a =! a shouldn ' t-il? ~ est un peu pas.Selon la façon dont true est défini, ~ true peut toujours être vrai.
boolean
est un alias de type non standard pourbool
défini dans la bibliothèque principale Arduino et est donc très spécifique à Arduino. Voir ma réponse pour plus de détails.