Verwenden eines speziellen Arduino “ booleschen ” Datentyp anstelle des Standard “ bool ” Datentyp

Es gibt einen speziellen, nicht standardmäßigen Arduino-Datentyp namens " boolean ".

Wie wird es mit dem Standard-C ++ – Datentyp verglichen? " bool " und was sind die Gründe für die Verwendung des einen oder anderen?

Wenn sie identisch verwendet werden, warum existieren beide und welche wird im Arduino-Code bevorzugt?

Kommentare

  • Dies ist eine grundlegende Programmierfrage, die nicht spezifisch für Arduino ist. Das endgültige C ++ – Buchhandbuch und die Liste . Oder Google
  • Willkommen bei Arduino Stack Exchange. Bitte nehmen Sie an der Tour unter arduino.stackexchange.com/Tour teil, um diese Website optimal zu nutzen. Boolean bedeutet binär, wie wahr / falsch. Führen Sie eine Google-Suche nach " Arduino-Datentypen " durch, um dies herauszufinden.
  • Ich bin damit nicht einverstanden keine Arduino-spezifische Frage. boolean ist ein nicht standardmäßiger Typalias für bool, der in der Arduino-Kernbibliothek festgelegt ist und daher sehr Arduino-spezifisch ist. Einzelheiten finden Sie in meiner Antwort.
  • Das Umbenennen von etwas bedeutet nicht, dass ' nicht bedeutet, dass ' dann spezifisch für Arduino ist.

Antwort

Während die anderen Antworten allgemein nützliche Informationen enthalten, scheinen die Autoren die Frage nicht sehr sorgfältig gelesen zu haben weil sie über den Typ bool sprechen und nicht über den Typ boolean Typ. In der Arduino-API ist boolean ein Typalias für bool, wie in Arduino.h definiert:

https://github.com/arduino/Arduino/blob/1.8.3/hardware/arduino/avr/cores/arduino/Arduino.h#L125

typedef bool boolean; 

Sie können also verwenden Der Typ boolean wie bool und jede Standard-C ++ – Programmierreferenz weisen Sie in die Verwendung von . Aus diesem Grund sind die anderen Antworten, die sich fälschlicherweise auf bool beziehen, immer noch etwas nützlich.

Anscheinend haben die Arduino-Leute irgendwann in der Vergangenheit den Namen boolean wäre anfängerfreundlicher als bool, möglicherweise konsistent mit der Verarbeitungssprache . Wie hier beschrieben:

https://github.com/arduino/Arduino/issues/4673

das Unnötige Die Verwendung eines nicht standardmäßigen Typs wird von einigen als schlechte Entscheidung angesehen, da seine Verwendung den Code weniger portabel macht und keinen klaren Vorteil gegenüber bool bietet. Ein Vorschlag ist in den Arbeiten, um die Verwendung von boolean aus allen offiziellen Arduino-Codes und -Dokumenten bool in der Arduino-Referenz zu entfernen, und einige möchten sogar formell ablehnen boolean. Daher empfehle ich, bool anstelle von boolean in Ihrem Code zu verwenden.

Antwort

Ein boolescher Variablentyp hat nur zwei mögliche Werte: true oder false. Intern wird es als int (16-Bit-Ganzzahl) oder uint8_t Typ (8-Bit-Ganzzahl).

Sie können den Wert „val“ zuweisen ues „von true oder false unter Verwendung des Zuweisungsoperators:

bool foo; foo = true; if (foo) { do_something(); } 

Intern ist eine true eine 1 und eine false eine 0, und die Zahlenwerte könnten gleichermaßen ersetzt werden.

Boolesche Typen in Arduino und C ++ existieren hauptsächlich aus Gründen der Lesbarkeit und nicht für eine bestimmte Effizienz gegenüber dem int -Typ.

Antwort

Die offizielle Referenz finden Sie hier

Am besten Verwenden Sie immer true und false und keine Zahlen.

Nachfolgend sind einige Beispiele aufgeführt.

Weisen Sie einem Booleschen Wert false bzw. true zu:

bool a = true; bool b = false; 

Überprüfen Sie den Booleschen Wert:

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 } 

Wenn b falsch ist, ist a falsch, andernfalls bleibt a so, wie es war

a &= b; 

Wenn b wahr ist, ist a wahr, andernfalls bleibt a so, wie es war

a |= b; 

// Wenn a wahr ist, ist es falsch und umgekehrt.

a = !a; 

Kommentare

  • Das letzte sollte a =! a sein, nicht ' nicht wahr? ~ ist ein bisschen nicht.Abhängig davon, wie wahr definiert ist, kann ~ wahr immer noch wahr sein.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.