Ja, ein int
Wert zu einem bool
Objekt. Beide sind Integertypen und der Wert wird implizit konvertiert.
Alte Versionen von C, vor 1999, hatten keinen eingebauten booleschen Typ. Es war üblich, Workarounds wie z.
typedef enum { false, true } bool;
oder
#define false 0
#define true 1
typedef int bool;
für einen solchen Typ hängt das Verhalten der Umwandlung auf, wie die Booleschen Typ definiert ist. Wenn bool
ein Alias für int
ist, ist die Konvertierung trivial. Wenn der konvertierte Wert genau 0
oder 1
ist, lautet das Ergebnis false
bzw. true
. Wenn der Wert etwas anderes ist, können Sie einen Wert erhalten, der weder false
noch true
ist, aber das wird als wahr behandelt, wenn es als Bedingung verwendet wird (aber nicht im Vergleich für die Gleichheit zu true
- also tun Sie das nicht). Sie können sogar einen unspezifizierten Wert erhalten, der 0
für einen Wert ungleich Null int
sein könnte (zum Beispiel, wenn bool
als char
definiert ist und die höherwertigen Bits verworfen werden).
Wenn Sie nicht in der Lage sind moderne C zu verwenden, entweder, weil Sie haben einen Pre-C99-Compiler oder weil Sie auf Legacy-Code arbeiten, können Sie den Wert normalisieren:
int n = 42;
bool b = (n == 0 ? false : true);
oder
bool b = n != 0
oder
bool b = !!n;
C99 hinzugefügt, um eine des Typs mit eingebauter _Bool
, die wr sein kann itten als bool
wenn Sie #include <stdbool.h>
haben. Die Umwandlung in _Bool
normalisiert automatisch den Wert.Die Umwandlung eines int
in den Typ _Bool
ergibt 0
(false
), wenn der Wert gleich Null ist, andernfalls 1
(true
).
Vielleicht ist es nur ich, aber es scheint irgendwie ... sinnlos? –
Ja, Sie können einer Integer-Variablen einen ganzzahligen Wert zuweisen. Stellen Sie nur sicher, dass der Wert in die Variable passt. – Olaf