Há um tipo de dados Arduino especial não padrão chamado " booleano ".
Como ele se compara ao tipo de dados C ++ padrão " bool ", e quais são as razões para usar um ou outro?
Se eles são idênticos no uso, por que existem ambos e qual é o preferido no código do Arduino?
Comentários
Resposta
Embora as outras respostas forneçam informações geralmente úteis, os autores parecem não ter lido a pergunta com muito cuidado porque eles estão falando sobre o tipo bool em vez do tipo booleano tipo. Na API do Arduino, boolean
é um alias de tipo para bool
, conforme definido em Arduino.h:
https://github.com/arduino/Arduino/blob/1.8.3/hardware/arduino/avr/cores/arduino/Arduino.h#L125
typedef bool boolean;
Então você pode usar o tipo boolean
exatamente como você faria bool
e qualquer referência de programação C ++ padrão o instruirá no uso de bool
. Por esse motivo, as outras respostas que erroneamente se referem a bool
ainda são um pouco úteis.
Aparentemente, em algum momento no passado, o pessoal do Arduino decidiu o nome boolean
seria mais amigável para iniciantes do que bool
, talvez para ser consistente com a linguagem de processamento . No entanto, conforme discutido aqui:
https://github.com/arduino/Arduino/issues/4673
o desnecessário o uso de um tipo não padrão é agora considerado por alguns como uma má decisão, pois seu uso torna o código menos portátil e realmente não oferece nenhuma vantagem clara sobre bool
. Uma proposta é em andamento para remover o uso de boolean
de todo o código oficial do Arduino e documento bool
na referência do Arduino e alguns até desejam suspender formalmente boolean
. Portanto, meu conselho é usar bool
em vez de boolean
em seu código.
Resposta
Um tipo de variável booleana é aquele que tem apenas 2 valores possíveis, true
ou false
. Internamente, é criado como um int
(inteiro de 16 bits) ou um uint8_t
type (inteiro de 8 bits).
Você pode atribuir o “val ues “de true
ou false
usando o operador de atribuição:
bool foo; foo = true; if (foo) { do_something(); }
Internamente, um true
é um 1
e um false
é um 0
, e os valores numéricos podem ser igualmente substituídos.
Os tipos booleanos em Arduino e C ++ existem principalmente para facilitar a leitura, e não para qualquer eficiência particular sobre o tipo int
.
Resposta
A referência oficial pode ser encontrada aqui
É melhor sempre use verdadeiro e falso, e não use números.
Abaixo alguns exemplos são dados
Atribua falso resp verdadeiro a um booleano:
bool a = true; bool b = false;
Verifique o valor booleano:
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 }
Se b for falso, a será falso, caso contrário a permanecerá como estava
a &= b;
Se b for verdadeiro, a será verdadeiro; caso contrário, a permanecerá como estava
a |= b;
// Se a for verdadeiro, será falso e vice-versa.
a = !a;
Comentários
- Este último deve ser a =! a não deve ' ser? ~ não é um pouco inteligente.Dependendo de como true é definido, true ainda pode ser true.
boolean
é um alias de tipo não padrão parabool
definido na biblioteca principal do Arduino e, portanto, é muito específico do Arduino. Veja minha resposta para detalhes.