www.mikrocontroller.net

Forum: Compiler & IDEs bool realisieren?


Autor: BAB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie kann man am besten eine bool variable realisieren ohne dabei gleich 
ein ganzes byte zu verschenken like unsigned char..?

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gar nicht

Du kannst bestenfalls mehrere BOOL-Werte in eine Bitvariable 
zusammenfassen. Aber mindestens 1 Byte benötigst du.

BTW, wenn du wissen willst wie so eine Bitvariable deklariert wird:

typedef unsigned char BYTE; // Damit es es einfacher geht
#define TRUE 0
#define FALSE 1

struct {
BYTE bBool1:1;
BYTE bBool2:1;
BYTE bBool3:1;
BYTE bBool4:1;
BYTE bBool5:1;
BYTE bBool6:1;
BYTE bBool7:1;
BYTE bBool8:1;
} bitVar;

So hast du 8 Boolsche Variablen, di zusammen nur 1 Byte Platz benötigen. 
Die Variablen sprichst du wie folgt an:

bitVar.bBool1 = TRUE; // Setzt die Variable bBool1 auf TRUE
bitVar.bBool2 = FALSE; // Setzt die Variable bBool1 auf TRUE

if (bitVar.bBool3) {   // Testet die Variable bBool3
TuEtwas();
}

Gruss
Christian

Autor: BAB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok..danke hast mir trotzdem sehr weitergeholfen und ich weiss wieder was 
mehr..:D

Autor: BitteRichtiger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, schon ewig alt, aber:

#define TRUE 1
#define FALSE 0

dann klappt es auch mit If(TRUE) ...

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
BitteRichtiger wrote:
> Sorry, schon ewig alt, aber:
>
> #define TRUE 1
> #define FALSE 0
>
> dann klappt es auch mit If(TRUE) ...
Jo, dann klappen aber damit keine Vergleiche, weil in C nunmal nicht nur 
die 1 TRUE ist, sondern alles, was nicht 0 ist. TRUE == 1 gilt nur als 
Ergebnis von Operationen (Eine Operation, die einen Wahrheitswert 
zurückgibt, liefert per Definition 0 für FALSE und 1 für TRUE).

Abgesehen davon bist Du vielleicht Rekordhalter im Herauskramen 
historischer Threads für nichts und wieder nichts geworden... Die Idee 
mit dem #define hatten nämlich schon gaaaanz viele andere, und 
diejenigen, die hier vor sechseinhalb Jahren diskutiert haben, dürfte 
das kaum noch interessieren...

EDIT:
Aaaargh, sehe jetzt erst, dass Du das vertauschte 0 und 1 meintest. 
Toll, aber auch der Fehler hätte niemanden gejuckt, wenn Du den Thread 
in Frieden hättest ruhen lassen...

Autor: MeinerEiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also bei mir sind True/False so definiert:

#define TRUE  (1==1)
#define FALSE (!TRUE)

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Also bei mir sind True/False so definiert:
>
> #define TRUE  (1==1)
> #define FALSE (!TRUE)

Und welchen Vorteil erhoffst du dir davon? Es hat exakt denselben Effekt 
wie:
#define TRUE 1
#define FALSE 0

Mein Vorschlag:

#include <stdbool.h>

Dann hat man den Typ bool mit den Werten true und false, wie in C++.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.