C hat keine eingebauten booleschen Typen. Wie kann man sie am besten in C verwenden?
Auch in C ist es in der Regel ein int, und es kann Verlust der Genauigkeit Warnungen von anderen Code, der int. verwendet verursachen.
C hat keine eingebauten booleschen Typen. Wie kann man sie am besten in C verwenden?
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.
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.
Auch in C ist es in der Regel ein int, und es kann Verlust der Genauigkeit Warnungen von anderen Code, der int. verwendet verursachen.
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.
93 Stimmen
C hat einen booleschen Typ. Zumindest gibt es einen in den neuesten Standards.
12 Stimmen
stackoverflow.com/questions/1608318/is-bool-a-native-c-type/