874 Stimmen

Verwendung boolescher Werte in C

C hat keine eingebauten booleschen Typen. Wie kann man sie am besten in C verwenden?

93 Stimmen

C hat einen booleschen Typ. Zumindest gibt es einen in den neuesten Standards.

12 Stimmen

3voto

Kalana Punkte 5073

Heutzutage C99 unterstützt boolesche Typen, aber Sie müssen #include <stdbool.h> .

#include <stdbool.h>

int main() 
{ 
    bool arr[2] = {true, false}; 

    printf("%d\n", arr[0] && arr[1]);
    printf("%d\n", arr[0] || arr[1]);

    return 0; 
} 

Ausgabe:

0
1

2voto

jamesdlin Punkte 63159

Bedingte Ausdrücke werden als wahr angesehen, wenn sie nicht Null sind, aber der C-Standard verlangt, dass logische Operatoren selbst entweder 0 oder 1 zurückgeben.

@Tom: #define TRUE !FALSE ist schlecht und völlig sinnlos. Wenn die Header-Datei ihren Weg in den kompilierten C++-Code findet, dann kann das zu Problemen führen:

void foo(bool flag);

...

int flag = TRUE;
foo(flag);

Einige Compiler geben eine Warnung wegen der Umwandlung int => bool aus. Manchmal vermeiden die Leute dies, indem sie es tun:

foo(flag == TRUE);

um zu erzwingen, dass der Ausdruck ein C++-Bool ist. Wenn Sie jedoch #define TRUE !FALSE verwenden, erhalten Sie folgendes Ergebnis:

foo(flag == !0);

was dazu führt, dass ein int-to-bool-Vergleich durchgeführt wird, der die Warnung trotzdem auslösen kann.

2voto

Lokian Punkte 93

Sie könnten _Bool verwenden, aber der Rückgabewert muss eine ganze Zahl sein (1 für true, 0 für false). Es wird jedoch empfohlen, bool wie in C++ einzubinden und zu verwenden, wie es in diese Antwort de daniweb forum sowie diese Antwort aus dieser anderen Stackoverflow-Frage:

_Bool: Der boolesche Typ von C99. Die direkte Verwendung von _Bool wird nur empfohlen, wenn Sie Legacy-Code pflegen, der bereits Makros für bool, true oder false definiert. Ansonsten sind diese Makros im Header standardisiert. Wenn Sie diesen Header einbinden, können Sie bool genau wie in C++ verwenden.

1voto

Filip Ekberg Punkte 35716

Sie können ein Zeichen oder einen anderen kleinen Zahlenbehälter dafür verwenden.

Pseudocode

#define TRUE  1
#define FALSE 0

char bValue = TRUE;

0 Stimmen

Auch in C ist es in der Regel ein int, und es kann Verlust der Genauigkeit Warnungen von anderen Code, der int. verwendet verursachen.

0 Stimmen

Sofern Sie nicht von Hand den Platzbedarf optimieren, ist es immer besser, die normale Wortgröße der Hardware zu verwenden (z. B.: normalerweise ein int ), da auf einigen Architekturen das Entpacken/Maskieren von Überprüfungen dieser Variablen zu einem erheblichen Leistungsverlust führt.

1voto

RngTng Punkte 1231

Es ist dies:

#define TRUE 1
#define FALSE 0

7 Stimmen

Id gehen mit etwas wie #define TRUE !FALSE

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X