Forum: Compiler & IDEs bool realisieren?


von BAB (Gast)


Lesenswert?

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

von Christian (Gast)


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

von BAB (Gast)


Lesenswert?

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

von BitteRichtiger (Gast)


Lesenswert?

Sorry, schon ewig alt, aber:

#define TRUE 1
#define FALSE 0

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

von Johannes M. (johnny-m)


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...

von MeinerEiner (Gast)


Lesenswert?

Also bei mir sind True/False so definiert:

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

von Rolf Magnus (Gast)


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:
1
#define TRUE 1
2
#define FALSE 0

Mein Vorschlag:

#include <stdbool.h>

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.